2016-07-30 62 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

相关问题