2016-07-30 64 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線的結果返回result.Succeeded = false

用戶名[email protected]的錯誤是無效的,只能包含字母或數字 。

爲什麼角色的調用應用驗證器,但創建用戶的調用不是?這都是模板代碼。

現在,鑑於這是全部模板代碼,我是否缺少某些內容或需要修改模板以讓用戶提供不是電子郵件地址的用戶名。

非常感謝。

+1

看來您的上下文或數據庫配置方式不允許在用戶名屬性中使用點和/或'@'符號。 – DevilSuichiro

+0

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

+0

用戶名被設置爲一個完美的電子郵件。只有將用戶添加到角色纔會導致問題。 –

回答

1

我有同樣的問題。爲了解決它,添加以下行,AddToRole()調用之前:

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

有人可能知道一個更優雅的解決方案,但這個工作對我來說,所以我從來沒有進一步調查!

HTH

相關問題