User email verification
設定可能な時間間隔、未確認アカウントの自動ブロック、リマインダー通知、オプションの延長確認期間を備えたユーザーアカウントのメール確認機能を提供します。
user_email_verification
インストール
composer require 'drupal/user_email_verification:8.x-1.3'
概要
User email verificationモジュールは、Drupalでユーザーのメールアドレスを確認するための包括的なソリューションを提供します。確認が完了するまでユーザーがログインできないDrupalコアのメール確認とは異なり、このモジュールでは設定可能な期間内にメール確認を強制しながら、登録直後にユーザーがログインできます。
モジュールは各ユーザーの確認レコードを作成し、確認ステータスを追跡します。ユーザーが指定された時間間隔内にメールを確認しない場合、アカウントは自動的にブロックされます。サイト管理者はブロック前に送信するリマインダーメールの数を設定でき、オプションでブロックされたユーザーにメールを確認してアカウントを再有効化するための追加時間を与える延長確認期間を有効にできます。
モジュールはDrupalのTokenシステムと統合してメールテンプレートに確認リンクを提供し、確認ステータスを表示するためのViews対応、未確認ユーザー向けの通知Block、およびカスタムワークフロー自動化のためのRulesモジュールとECAモジュールの両方との包括的な統合を提供します。
Features
- 登録時にパスワードを入力でき、登録直後にログイン可能
- 設定可能な時間間隔(デフォルト7日)での自動メール確認追跡
- 制限時間内に確認しなかったユーザーアカウントの自動ブロック
- 確認期間中に等間隔で送信される設定可能なリマインダーメール(最大3通)
- ブロックされたユーザーに確認とアカウント再有効化のための追加時間を与える延長確認期間オプション
- メール確認要件からのロールベースの免除
- 確認ステータスと日付を表示するユーザープロフィールの追加フィールド
- ログインユーザーにメール確認を促す通知Block
- ユーザー確認ステータスのフィルタリングと表示のためのViews統合
- メールテンプレート用のカスタムToken [user:verify-email] と [user:verify-email-extended]
- カスタム条件とアクションのためのRulesモジュール統合
- イベント駆動ワークフローのためのECAモジュール統合
- 確認依存コンテンツの適切なキャッシュのためのCache context
- Configuration Translationモジュールによる翻訳可能なメール件名と本文
- cronによるブロック、リマインダー、アカウント削除のQueueベース処理
- 機能拡張のためのイベント:アカウントブロック、アカウント削除、確認作成、メール確認
- 管理者が作成したアカウントの自動確認オプション
- 管理者がブロックされたアカウントを手動で有効化した際の自動確認
- 確認成功後の設定可能なリダイレクトURL
Use Cases
ECサイトのユーザー登録
顧客が登録してすぐに商品を閲覧でき、注文前にメール確認を要求します。48時間の確認期間と2回のリマインダーを設定します。カート領域に通知Blockを使用して、未確認ユーザーにチェックアウト前に確認するよう促します。
スパム防止付きコミュニティフォーラム
ユーザーがコンテンツを投稿する前にメール確認を要求することでスパムアカウントを防止します。リマインダーなしで24時間の短い確認期間を設定します。未確認アカウントは自動的にブロックされ、コミュニティを偽の登録から守ります。
延長回復付き企業イントラネット
アカウント回復が重要な内部アプリケーションでは、延長確認期間を有効にします。最初の7日間の期間を逃したユーザーでも、確認してアカウントを回復するために追加の14日間があります。ブロックされたユーザーが確認を完了すると管理者に通知されます。
選択的確認付きマルチロールサイト
ロールベースの免除を使用して、「認証済みメンバー」や「プレミアム会員」などの信頼されたユーザーロールの確認をスキップし、標準登録には確認を要求します。
Rules/ECAを使用した自動ワークフロー
RulesまたはECA統合を使用してカスタムワークフローを作成します。例えば、メールが確認されたときに自動的に「確認済みユーザー」ロールを割り当てたり、確認成功後に特別なウェルカムメッセージを送信したりします。
Tips
- メールテンプレートを設定するときにTokenモジュールを使用して利用可能なTokenのツリーブラウザを取得できます
- ユーザーが確実に見えるように、通知Blockをヘッダーや強調領域など見やすい領域に配置してください
- 時間間隔を設定する際はユーザー体験を考慮してください - 短すぎると正当なユーザーを困らせ、長すぎるとスパムアカウントを許可してしまいます
- Views統合を使用して未確認ユーザーとその確認ステータスの管理レポートを作成できます
- 多言語サイトでは、Configuration Translationを使用してメールの件名と本文を翻訳できます
- モジュールはアカウント削除動作の「ユーザーアカウントをキャンセルするとき」設定を尊重します
- ユーザー回復が厳格な強制よりも重要なサイトでは延長確認期間を有効にしてください
- RulesまたはECAと組み合わせてカスタム通知ワークフローやCRMシステムとの統合を作成できます
Technical Details
Admin Pages 2
/admin/config/people/user-email-verification
時間間隔、リマインダー、延長確認期間、メールテンプレートを含むメール確認動作のすべての側面を設定します。
/user/user-email-verification
ユーザーがユーザー名またはメールアドレスを入力して新しい確認メールをリクエストできる公開フォーム。
権限 1
Hooks 8
hook_user_insert
新しいユーザーアカウントが作成されたときに確認レコードを作成します。
hook_user_delete
ユーザーアカウントが削除されたときに確認レコードを削除します。
hook_cron
リマインダーの送信、アカウントのブロック、アカウントの削除を含む定期タスクを処理します。
hook_mail
確認メールとリマインダーメールのメールメッセージを準備します。
hook_entity_extra_field_info
確認ステータスと日付を表示するユーザーEntityの追加フィールドを提供します。
hook_user_presave
管理者がブロックされたアカウントを有効化したときにユーザーを自動確認します(設定で有効な場合)。
hook_condition_info_alter
Rulesモジュールが有効でない場合にRules条件を削除します。
hook_user_view
ユーザーEntity表示に確認ステータスと日付を追加します。
Troubleshooting 7
サイトのメールシステムが正しく設定されていることを確認してください。/admin/config/people/accountsのウェルカムメールテンプレートに[user:verify-email]Tokenが含まれていることを確認してください。ユーザーのメールアドレスが有効でブロックされていないことを確認してください。
「確認時間間隔」設定を確認してください - 秒単位で妥当な値に設定されていることを確認してください(604800 = 7日)。低すぎると、ユーザーが確認する十分な時間がありません。
確認リンクの有効性は「確認時間間隔」設定に紐付いています。リンクがクリックされる前に期限切れになる場合は、この値を増やしてください。
「アカウント作成時の自動確認を無効にする」設定を確認してください。有効になっている場合、管理者が作成したアカウントもメール確認が必要になります。
「延長確認期間」機能を有効にして、ブロックされたユーザーにメールを確認してアカウントを再有効化するための追加時間を与えてください。
Rules条件にはRulesモジュールが有効である必要があります。Rulesがインストールされていない場合、これらの条件は自動的に削除されます。同様に、ECA条件にはECAモジュールが必要です。
モジュールがインストールされると、すべての既存ユーザーは現在のタイムスタンプで自動的に確認済みとしてマークされます。これが発生しなかった場合は、データベーステーブルuser_email_verificationを確認してください。
Security Notes 5
- 確認リンクはセキュリティのためにサイトのハッシュソルトを使用したHMACベースの認証を使用します
- リンクには設定された時間間隔に基づいて有効期限を強制するタイムスタンプが含まれます
- 「User email verification設定の管理」権限は「アクセスを制限」としてマークされています - 信頼できる管理者にのみ付与してください
- 「ユーザーアカウントを削除」オプションの影響を考慮してください - 削除されたアカウントとそのコンテンツはキャンセル方法によっては永久に失われる可能性があります
- モジュールはデフォルトでは「ユーザーを管理」権限を持つアカウントには影響しません