2016-07-30 17 views
0

以下のコードは、現在の認証ユーザーをAdminという名前のロールに割り当てるために呼び出されます。ユーザーは既に正しく構成された電子メールアドレスで作成されており、その電子メールアドレスで認証することができます。ただし、以下のデモコードを使用してユーザーをロールに追加したいとします。ユーザー名が電子メールアドレスのユーザーにユーザーを追加する

public ActionResult AddUserToRole() 
{ 
    var userId = User.Identity.GetUserId(); 
    using (var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
    { 
     IdentityResult result = userManager.AddToRole(userId, "Admin"); 
    } 
    return RedirectToAction("Index"); 
} 

ユーザーは、新しいMVC 5アプリケーションのテンプレートコードを使用して作成されました。テンプレートコードは、ユーザー名の電子メールアドレスを要求します。しかし、AddToRoleラインの結果が

ユーザー名[email protected]のエラーでresult.Succeeded = falseを返すことは無効である、文字や 数字のみを含めることができます。

なぜroleの呼び出しでバリデータが適用されますが、ユーザーを作成する呼び出しには影響しません。それはすべてテンプレートコードです。

これはすべてテンプレートコードであるため、何か不足しているか、テンプレートを変更してユーザーに電子メールアドレスではないユーザー名を指定させる必要がありますか?

多くのありがとうございます。

+1

あなたのコンテキストまたはデータベースは、ユーザー名プロパティにドットおよび/または「@」記号を許可しないように構成されているようです。 – DevilSuichiro

+0

重複http://stackoverflow.com/questions/19460078/configure-microsoft-aspnet-identity-to-allow-email-address-as-username –

+0

ユーザー名は電子メールとして完全に設定されています。役割にユーザーを追加するだけで問題が発生しました。 –

答えて

1

私は同じ問題を抱えていました。

 userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false }; 

誰かがよりエレガントな解決策を知っているかもしれませんが、これは私のために働いたので、私はさらに調査したことがない:それを回避するために、AddToRole()を呼び出す前に、次の行を追加します!

HTH

関連する問題