Email Registration

ユーザーがユーザー名の代わりにメールアドレスで登録・ログインできるようにするモジュール

email_registration
26,767 sites
82
drupal.org

インストール

Drupal 10, 9 v8.x-1.4
composer require 'drupal/email_registration:8.x-1.4'

概要

Email Registrationは、ユーザーがメールアドレスのみで登録・ログインできるようにするDrupalモジュールです。従来のDrupalでは、ユーザー登録時にユーザー名とメールアドレスの両方が必要でしたが、このモジュールを使用するとメールアドレスのみで登録が可能になります。

ユーザー名はメールアドレスから自動生成されます(デフォルトでは@より前の部分)。この自動生成ロジックはフックを使用してカスタマイズできます。ログイン時もメールアドレスで認証できるため、ユーザーは覚えやすいメールアドレスのみを使用してサイトにアクセスできます。

Drupal Commerceとの連携機能も提供しており、チェックアウトフロー用の代替ログインペインが用意されています。また、既存ユーザーのユーザー名を一括更新するアクションや、Drupal 7からの移行機能、Behat(自動テスト)のサポートなど、実運用に必要な機能が揃っています。

Features

  • メールアドレスのみでのユーザー登録(ユーザー名フィールドは自動生成)
  • メールアドレスでのログイン認証(REST API含む)
  • ユーザー名とメールアドレスの両方でログインを許可するオプション
  • メールアドレスからユーザー名を自動生成(@より前の部分を使用、重複時は_1, _2等のサフィックスを追加)
  • フックによるユーザー名生成ロジックのカスタマイズ(hook_email_registration_name_alter)
  • 複数ユーザーのユーザー名を一括更新するバルクアクション
  • Drupal Commerceチェックアウトペインとの統合(ゲストチェックアウト対応)
  • REST API(user.login.http)でのメールアドレスによるログインサポート
  • Drupal 7からの設定移行機能
  • Behat(自動テストフレームワーク)との統合サポート
  • サブモジュール「Email Registration Username」によるメールアドレスをそのままユーザー名として使用する機能

Use Cases

シンプルな会員サイト

ユーザーにとってメールアドレスは覚えやすく、ユーザー名を別途設定する必要がないため、登録のハードルを下げられます。ニュースレターサイトやメンバーシップサイトで、ユーザーがメールアドレスのみで簡単に登録・ログインできるようになります。

ECサイトのゲストチェックアウト

Drupal Commerceと組み合わせて、ゲストとして購入したユーザーが後からアカウントを作成できます。チェックアウト時にはメールアドレスのみでログインでき、ユーザー名を覚える必要がありません。

既存ユーザーの移行

従来のユーザー名ベースのサイトをメールアドレスベースに移行する場合、「Update username (from email_registration)」アクションで既存ユーザーのユーザー名を一括更新できます。また、Drupal 7からの移行時にはemail_registration_user_nameプロセスプラグインを使用できます。

REST APIを使用したモバイルアプリ認証

REST APIエンドポイント(user.login.http)がメールアドレスでのログインに対応しているため、モバイルアプリやSPAからメールアドレスとパスワードでユーザー認証を行えます。リクエストボディにmailとpassを送信します。

自動テスト(Behat)でのユーザーシナリオ

Behatを使用した自動テストで、ユーザーログインシナリオをメールアドレスベースで実行できます。behat.services.ymlの設定をインポートするだけで、テストシナリオでメールアドレスによるログインが使用されます。

Tips

  • ウェルカムメールやパスワードリセットメールのテンプレートで[user:display-name]トークンを[user:mail]に置き換えると、ユーザーに送信されるメールでメールアドレスが表示されます
  • ユーザー名の自動生成ロジックをカスタマイズしたい場合は、hook_email_registration_name_alter()を実装したカスタムモジュールを作成してください。email_registration_cleanup_username()とemail_registration_unique_username()関数を使用すると、クリーンアップとユニーク性の保証を簡単に行えます
  • Commerce連携を使用する場合、チェックアウトフロー設定(/admin/commerce/config/checkout-flows)で「Login」ペインを「Login with email registration or continue as guest」に置き換えてください
  • email_registration_usernameサブモジュールを使用すると、メールアドレスがそのままユーザー名になりますが、セキュリティ上のリスク(メールアドレスの露出)があることに注意してください。表示名の上書きオプションを活用してリスクを軽減できます
  • 大量の既存ユーザーのユーザー名を更新する場合、管理 > ユーザー画面(/admin/people)でユーザーを選択し、「Update username (from email_registration)」アクションを使用できます

Technical Details

Admin Pages 1
アカウント設定 /admin/config/people/accounts

Email Registrationモジュールの設定はDrupal CoreのアカウントSCRIPT設定ページに統合されています。このページでは、メールアドレスとユーザー名の両方でログインを許可するかどうかを設定できます。

権限 2
自分のユーザー名を変更

ユーザーが「マイアカウント」ページで自分のユーザー名を変更できるようにします。このパーミッションがない場合、ユーザー名フィールドはユーザー編集フォームで非表示になります。

ユーザー管理

管理者が他のユーザーのユーザー名を編集したり、管理画面でユーザーを作成したりできます。ユーザー作成時、ユーザー名フィールドを空にするとメールアドレスから自動生成されます。

Hooks 2
hook_email_registration_name_alter

ユーザー名の自動生成ロジックをカスタマイズするためのフック。ユーザー保存時(presave)に呼び出され、生成されるユーザー名を変更できます。

hook_email_registration_name

【非推奨】ユーザー名を生成するためのレガシーフック。2.0.0で非推奨となり、3.0.0で削除予定。代わりにhook_email_registration_name_alter()を使用してください。

Troubleshooting 5
LoginTobogganモジュールとの競合エラーが表示される

LoginTobogganの「Allow users to login using their email address」オプションを無効にしてください。両方のモジュールが同じ機能を提供しようとするため競合が発生します。

ユーザー名が自動生成されずにemail_registration_で始まる文字列のままになる

hook_email_registration_name_alter()を実装するカスタムモジュールがある場合、フックの実行順序を確認してください。email_registrationモジュール自身も同フックを実装しており、モジュールの重み(weight)によって実行順序が決まります。

ユーザーがユーザー名を変更できない

「change own username」パーミッションを適切なロールに付与してください。このパーミッションがないユーザーには、ユーザー編集フォームでユーザー名フィールドが表示されません。

ログインフォームで「Email address」ではなく「Email address or username」と表示される

「login_with_username」設定がtrueになっています。メールアドレスのみでログインさせたい場合は、管理 > 環境設定 > ユーザー > アカウント設定でこのオプションを無効にしてください。

ブロックされたユーザーがログインしようとしたときのエラーメッセージがわかりにくい

モジュールは「The account with email address %name has not been activated or is blocked.」というメッセージを表示します。これは意図された動作です。

Security Notes 3
  • email_registration_usernameサブモジュールを使用すると、ユーザー名としてメールアドレスが使用されるため、コメントやコンテンツの投稿者名としてメールアドレスが表示される可能性があります。「Override user display name」オプションを使用してこのリスクを軽減してください
  • 「login_with_username」オプションを有効にすると、ユーザー名でもログインできるようになります。ユーザー名がメールアドレスから自動生成される場合、攻撃者がメールアドレスの一部を推測してログインを試みる可能性があります
  • REST APIでのログイン(user.login.http)もメールアドレスベースになるため、ブルートフォース攻撃対策として、Drupal Coreのフラッドコントロール機能が適用されます