Email Confirmer
確認リンクを通じてメールアドレスを検証するためのAPI、コンテンツEntity、ユーティリティを提供するDrupal向けの包括的なメールアドレス確認サービスです。
email_confirmer
インストール
composer require 'drupal/email_confirmer:8.x-1.0'
概要
Email Confirmerは、Drupalにおけるメールアドレス確認のための完全なソリューションです。他のモジュールがメールアドレスを確認するために使用できる集中化されたAPIとサービスを提供し、確認プロセスを保存・管理するためのコンテンツEntityタイプも含まれています。
このモジュールは、メールアドレスに一意のリンクを含む確認リクエストを送信します。受信者はこれらのリンクをクリックして確認またはキャンセルでき、レスポンスフォームに導かれます。各確認には、メールアドレス、開始ユーザー、IPアドレス、作成タイムスタンプ、カスタムプロパティ、realm(スコープ/モジュール)、ステータスフラグ(保留中、キャンセル済み、確認済み、送信済み)、および異なる結果に対するリダイレクトURLなどの詳細情報が保存されます。
Email Confirmerの主な利点は、確認済みメールアドレスのデータベースを維持することで、ユーザーがニュースレター購読やプロフィール更新など異なる目的で同じアドレスを繰り返し確認する必要がなくなることです。モジュールは設定可能な有効期間に基づいて、cronを通じて古い確認レコードを自動的にパージします。
含まれているEmail Confirmer Userサブモジュールは、ユーザー関連のイベントに機能を拡張します。例えば、ユーザーがメールアドレスを変更する際に確認を要求したり、Drupal coreのメール検証ステータスを確認データベースと同期したりします。
Features
- 他のモジュールが統合できる集中化されたメール確認APIとサービス
- 確認プロセスを保存・管理するためのカスタムコンテンツEntityタイプ(email_confirmer_confirmation)
- パーソナライズのためのToken対応を含む設定可能な確認メールテンプレート
- カスタマイズ可能なメッセージでユーザーがメール確認を承認またはキャンセルできるレスポンスフォーム
- レスポンスフォームをスキップして効率的な検証を行うオプションの直接確認モード
- 元のIPアドレスからのみレスポンスを受け付けるIPベースのアクセス制限オプション
- 開始ユーザーのみにレスポンスを制限するプライベート確認サポート
- 設定可能な有効期間(1週間から1年、または永久)でcronを通じた古い確認レコードの自動パージ
- 確認メールの再送信をレート制限するためのQueueベースの遅延リクエストディスパッチャー
- モジュールがフィルタリングと整理のために確認を名前空間化できるrealmシステム
- モジュール固有のデータのための確認Entityへの任意プロパティ保存
- 異なる確認コンテキストに対する確認後、キャンセル後、またはエラー後の設定可能なリダイレクトURL
- Userサブモジュール:変更を適用する前に新しいメールアドレスの検証を要求するメール変更確認
- Userサブモジュール:メール変更がリクエストされた際の現在のメールアドレスへの通知
- Userサブモジュール:初回ユーザーログインおよびワンタイムログインリンク使用時の自動確認記録
- スケジュールされたパージジョブのためのUltimate Cronモジュールとの統合
Use Cases
ニュースレター購読確認
email_confirmerサービスを使用してニュースレター購読リクエストを検証します。ユーザーがニュースレターに登録したとき、$email_confirmer->confirm($email, ['subscription_type' => 'newsletter'], 'mymodule_newsletter')を呼び出して確認を開始します。hook_email_confirmer()を実装して確認された購読を処理し、ユーザーをメーリングリストに追加します。
ユーザーメールアドレス変更検証
Email Confirmer Userサブモジュールを有効にして、変更が適用される前にユーザーに新しいメールアドレスの確認を要求します。確認されるまで元のメールがアクティブのままなので、不正なメールハイジャックを防ぎ、ユーザーがアカウントへのアクセスを維持できるようにします。
お問い合わせフォーム検証
メッセージを処理する前にメール確認を要求することで、お問い合わせフォームの送信を検証します。フォームデータを保存するカスタムプロパティを持つ確認を作成し、確認されたときにhook_email_confirmer()でメッセージを処理します。
アカウント登録のダブルオプトイン
coreのユーザー登録とともにemail confirmerを使用してダブルオプトイン登録を実装します。Userサブモジュールはユーザーが登録を完了したときに自動的に確認を記録し、検証済みメールデータベースを構築します。
ヘッドレスDrupal向けAPIベースのメール検証
デカップルドフロントエンド向けのメール検証を提供するために、カスタムRESTエンドポイントでemail_confirmerサービスを使用します。プログラムで確認を作成し、レスポンスURLをフロントエンドルートを指すようにカスタマイズし、APIを通じて確認ステータスをクエリします。
Tips
- confirm()メソッドを呼び出すときに「realm」パラメータを使用して、モジュールの確認を名前空間化してください。これにより、ソースで確認をフィルタリングでき、異なるユースケース間の競合を防ぎます。
- 確認EntityでsetProperty()を使用してカスタムデータを保存してください。このデータは永続化され、レスポンスを処理するときにhook_email_confirmer()で利用できます。
- setResponseUrl()を使用して確認ごとにカスタムリダイレクトURLを設定し、確認、キャンセル、またはエラー後にユーザーを適切なコンテキストのページに誘導してください。
- setPrivate()を使用して確認をプライベートとしてマークし、開始ユーザーのみが応答できるようにすることで、他の認証済みユーザーが確認をハイジャックするのを防ぎます。
- Userサブモジュールの「既存の確認を考慮」オプションは、以前に検証されたメールアドレスを再度確認するようユーザーに求めないことで、摩擦を軽減します。
- メールテンプレートのToken置換は、[email-confirmer:confirmation-mail]、[email-confirmer:confirmation-url]、[site:name]、[site:url]、その他の標準的なDrupal Tokenをサポートしています。
Technical Details
Admin Pages 2
/admin/config/system/email-confirmer
確認の有効期限、メールテンプレート、レスポンスフォームの動作、リダイレクトURLなど、コアメール確認サービスの設定を構成します。
/admin/config/system/email-confirmer/user
メール変更確認やログインベースの確認記録など、ユーザー関連のメール確認動作を設定します。
権限 3
Hooks 1
hook_email_confirmer
メール確認のレスポンスに対してアクションを実行します。確認が承認またはキャンセルされたときにモジュールが反応できるようにします。
Troubleshooting 6
「access email confirmation」権限が適切なユーザーロールに付与されていることを確認してください。この権限はデフォルトで無効です。
/admin/config/system/email-confirmerの「レスポンス時間制限」設定を増やしてください。デフォルトは24時間ですが、最大48時間まで延長できます。
アンインストール前にメール確認Entityを削除する必要があります。「Delete all」contribモジュール(https://www.drupal.org/project/delete_all)を使用して、すべてのemail_confirmer_confirmation Entityを一括削除してください。
「再送信リクエストまでの遅延」設定を増やして、再送信試行間の待機時間を長く強制します。遅延が経過する前に行われたリクエストは、後で配信するためにキューに入れられます。
Email Confirmer Userサブモジュールが有効になっており、/admin/config/system/email-confirmer/userで「確認を要求」がチェックされていることを確認してください。また、ユーザーが「access email confirmation」権限を持っていることも確認してください。
ユーザーが異なるデバイスやネットワークから確認する必要がある場合は、「リクエストされたのと同じIPアドレスからのみメール確認レスポンスを受け付ける」設定を無効にしてください。
Security Notes 6
- 「administer email confirmations」権限は機密性が高いため「restrict access」としてマークされています。信頼できる管理者ロールにのみ付与してください。
- 高セキュリティシナリオでは確認にIP制限を有効にしてください。ただし、モバイルネットワークやVPNからアクセスするユーザーに問題を引き起こす可能性があることに注意してください。
- モジュールは、Drupalのプライベートキーを使用してメール、タイムスタンプ、IPから生成されたHMACベースのハッシュを使用して、安全な確認URLを作成します。
- プライベート確認は、アカウント所有者のみが特定の確認に応答できることを保証することで、追加のセキュリティレイヤーを追加します。
- Userサブモジュールの現在のメールアドレスへの通知は、不正なメール変更試行を検出するのに役立ちます。
- 「レスポンスフォームをスキップ」モードのセキュリティ上の影響を考慮してください - 便利ですが、メールセキュリティソフトウェアがリンクをプレビューした場合に誤った確認が発生する可能性があります。