私は新しい ASP.NET Identity (RTM) を使用していますが、登録とログインをユーザー名から電子メールに変更するにはどうすればよいのか知りたいです。
私の考えは、ユーザーに電子メールとパスワード(電子メールは外部ログインを使用して取得することもできます)を使用してサインアップしてもらい、その上に表示名/ユーザー名を設定してもらうことです。
IdentityUser を調べたところ、UserName がそこにあることがわかりましたが、これは ASP.Net Identity にパックされているため変更できません。
カスタム検証機能を使用して「UserName」を電子メールとして使用し、ApplicationUser に DisplayName という追加属性を設定することはできますが、これは解決策というよりはハックです。
私の質問が明確であることを願います。よろしくお願いします。
ベストアンサー1
もし本当にメールアドレスを使ってログインしたいのであれば、私の意見では、あなたが提案した「ハック」が最良のアプローチです。なぜなら、もし「きちんとやる」ことにこだわるなら、少なくとも
- データベーススキーマを変更することは明らかです
- ユーザー名の一意性を自分で確認します (データベース制約/インデックスでこれを行うこともできますが、エラーに対処してユーザーに報告する適切な方法を見つける必要があります)
- コードに「User.Identity.UserName」と書く代わりになる良い方法を見つけてください
- おそらくさらに
一方、UserNameフィールドを「ハック」する場合は、
- RegisterViewModel の検証を変更し (UserName プロパティに [EmailAddress] を追加)、[Display(Name=...)] などを少しカスタマイズします。
AccountController で使用される UserManager.UserValidator インスタンスが、電子メール アドレスで使用される特殊文字を許可していることを確認します。これを行うには、その非デフォルト コンストラクターが次のようになっていることを確認します。
public AccountController(UserManager<ApplicationUser> userManager) { UserManager = userManager; var userValidator = UserManager.UserValidator as UserValidator<ApplicationUser>; userValidator.AllowOnlyAlphanumericUserNames = false; }
両方のアプローチの長所と短所を比較検討し、最善の解決策を見つけるのに役立つことを願っています。幸運を祈ります!