インストール
composer require 'drupal/mail_login:^4.2'
composer require 'drupal/mail_login:^3.2'
概要
Mail Loginは、Drupalの標準的なユーザー名によるログイン機能を拡張し、メールアドレスでのログインを可能にするモジュールです。ユーザーはユーザー名の代わりに、または加えて、登録済みのメールアドレスを使用してサイトにログインできるようになります。
このモジュールはDrupalコアの認証サービス(user.auth)をデコレートすることで動作し、ログインフォームでメールアドレスが入力された場合に、対応するユーザーアカウントを検索して認証を行います。RFC 5321に準拠し、メールアドレスの大文字小文字の区別についても柔軟に対応できます。
さらに、ログインフォームとパスワードリセットフォームのラベルやヘルプテキストをカスタマイズする機能も備えており、ユーザーに対してメールアドレスでログインできることを明確に伝えることができます。オプションで、ユーザー名でのログインを完全に無効化し、メールアドレスのみでのログインを強制することも可能です。
Features
- メールアドレスによるログイン機能 - ユーザーはユーザー名の代わりにメールアドレスでサイトにログインできる
- メールアドレスのみでのログイン強制 - ユーザー名でのログインを無効化し、メールアドレスでのログインを必須にできる
- メールアドレスの大文字小文字の区別設定 - 大文字小文字を区別するかどうかを選択可能(RFC 5321準拠)
- ログインフォームのラベルカスタマイズ - ユーザー名フィールドのタイトルと説明文を自由に変更可能
- パスワードリセットフォームのラベルカスタマイズ - パスワードリセット画面のフィールドラベルも変更可能
- Drupal標準のフラッド制御との統合 - ブルートフォース攻撃対策として既存のフラッド制御機能と連携
- 多言語対応 - すべてのラベルとメッセージが翻訳可能
Use Cases
一般的なWebサイトでのユーザビリティ向上
多くのユーザーは自分のユーザー名を忘れがちですが、メールアドレスは覚えていることが多いです。Mail Loginを導入することで、ユーザーがログインできないという問い合わせを減らし、ユーザー体験を向上させることができます。設定画面でフォームラベルをカスタマイズして、ユーザーにメールアドレスでログインできることを明確に伝えましょう。
企業向けイントラネットでのメールアドレス統一認証
企業のイントラネットサイトでは、社員が社内メールアドレスで統一的にログインできるようにしたい場合があります。「メールアドレスのみでのログイン」オプションを有効にすることで、ユーザー名の管理を簡素化し、社員は自分の会社メールアドレスだけでログインできるようになります。
既存サイトへの段階的導入
既存のDrupalサイトにMail Loginを導入する場合、最初はユーザー名とメールアドレスの両方でログインできる状態を維持し、ユーザーに周知してから段階的に「メールアドレスのみ」モードに移行することができます。フォームラベルのカスタマイズ機能を使って、移行期間中は「ユーザー名またはメールアドレス」と表示し、完全移行後は「メールアドレス」のみと表示するといった運用が可能です。
多言語サイトでのログインフォームローカライズ
多言語サイトでは、ログインフォームのラベルも各言語に翻訳する必要があります。Mail Loginのすべてのラベル設定は翻訳可能(translatable)としてマークされているため、Drupalの標準的な翻訳インターフェース(/admin/config/regional/config-translation)を使用して各言語のラベルを設定できます。
セキュリティ重視サイトでのユーザー名非公開化
セキュリティを重視するサイトでは、ユーザー名を外部に露出させたくない場合があります。「メールアドレスのみでのログイン」を有効にすることで、ユーザー名の存在を隠蔽し、攻撃者がユーザー名を推測してブルートフォース攻撃を行うリスクを軽減できます。モジュールはDrupalのフラッド制御機能と統合されており、ブルートフォース攻撃からの保護も維持されます。
Tips
- インストール後すぐに使える - デフォルト設定でメールアドレスログイン機能とフォームラベルの上書きが有効になっています
- 設定のエクスポート - Drupalの設定管理機能を使って mail_login.settings をエクスポートし、ステージング環境から本番環境へ設定を移行できます
- 翻訳管理 - /admin/config/regional/config-translation/mail_login.admin で、各言語のフォームラベルを翻訳できます
- テスト時の注意 - メールアドレスでのログインをテストする際は、実際に登録されているメールアドレスを使用し、フラッド制御による一時的なロックアウトに注意してください
Technical Details
Admin Pages 1
/admin/config/people/mail-login
メールアドレスによるログイン機能の設定画面。ログイン方法の制御とフォームラベルのカスタマイズを行う。
権限 1
Hooks 2
hook_form_alter
ログインフォーム(user_login_form)とパスワードリセットフォーム(user_pass)を改変して、メールアドレスでのログイン用のバリデーションを追加し、設定に応じてフィールドラベルと説明文を上書きする。
hook_help
モジュールのヘルプページ(/admin/help/mail_login)に表示される説明文を提供する。利用可能な設定項目の一覧を含む。
Troubleshooting 5
1. /admin/config/people/mail-login で「メールアドレスでのログインを有効にする」がチェックされているか確認してください。2. 入力したメールアドレスが正しいか、またそのメールアドレスで登録されたアカウントが存在するか確認してください。3. アカウントがブロックされていないか確認してください(ブロックされたユーザーはログインできません)。
「メールアドレスのみでのログイン」オプションが有効になっている可能性があります。/admin/config/people/mail-login でこのオプションを無効にするか、メールアドレスを使用してログインしてください。
デフォルトではメールアドレスは大文字小文字を区別します。/admin/config/people/mail-login で「メールアドレスの大文字小文字を区別する」を無効にすることで、大文字小文字を無視したログインが可能になります。ただし、同じメールアドレス(大文字小文字の違いのみ)で複数のアカウントが存在する場合は、一意性を保証するため大文字小文字が区別されます。
1. 「ログインフォームを上書き」オプションが有効になっているか確認してください。2. キャッシュをクリアしてください(drush cr または /admin/config/development/performance でキャッシュをクリア)。3. フォームの表示条件(#states)により、一部のフィールドは特定の条件下でのみ表示されます。
「administer mail login」パーミッションが必要です。/admin/people/permissions で、該当するロールにこの権限が付与されているか確認してください。
Security Notes 4
- 「administer mail login」パーミッションは「restrict access: TRUE」としてマークされています。信頼できる管理者にのみ付与してください。
- このモジュールはDrupal標準のフラッド制御機能と連携しており、ブルートフォース攻撃に対する保護が維持されます。IPアドレスベースとユーザーベースの両方のフラッド制御が適用されます。
- メールアドレスのみでのログインを強制する場合、ユーザー名の存在を隠蔽できますが、メールアドレスの存在確認攻撃には別途対策が必要です。
- 大文字小文字を区別しない設定は利便性を向上させますが、RFC 5321ではメールアドレスの大文字小文字の区別が許可されているため、稀に異なるユーザーが同じメールアドレス(大文字小文字の違いのみ)を持つ可能性があります。そのような場合、モジュールは一意性を保証するため大文字小文字を区別します。