ASP.Net ユーザー名をメールで送信して質問する

ASP.Net ユーザー名をメールで送信して質問する

私は新しい 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;
    }
    

両方のアプローチの長所と短所を比較検討し、最善の解決策を見つけるのに役立つことを願っています。幸運を祈ります!

おすすめ記事