我正在使用新的ASP.NET身份(RTM),我想知道如何更改注册和登录从用户名到电子邮件。
这个想法是,我希望我的用户使用他们的电子邮件和密码注册(也可以使用外部登录获取电子邮件),并在顶部设置显示名称/用户名。
我看过IdentityUser,我可以看到UserName是存在的,但是由于它是在ASP.Net标识中打包而无法更改的。
我知道我可以使用“UserName”作为电子邮件,使用自定义验证器,然后为ApplicationUser调用DisplayName具有一个额外的属性,但这比一个解决方案更麻烦。
我希望我的问题很清楚。提前致谢。
解决方法
如果您真的想使用电子邮件地址登录,那么IMHO,您建议的“黑客”是最好的方法。因为,如果你坚持“正确地做”,至少你必须
>修改数据库模式,显然
>确保用户名的唯一性(您可以使数据库约束/索引为您做到这一点,但是您必须找到一个很好的方式来处理错误并向用户报告错误)
找到一个很好的替代品,只需在你的代码中写“User.Identity.UserName”
>可能更多
另一方面,如果您决定“骇客”您需要的UserName字段
>修改Registerviewmodel验证(将[EmailAddress]添加到UserName属性),可能稍微自定义[Display(Name = …)]等
>确保您的AccountController中使用的UserManager.UserValidator实例允许在电子邮件地址中使用特殊字符。为此,请确保其非默认构造函数如下所示:
public AccountController(UserManager<ApplicationUser> userManager) { UserManager = userManager; var userValidator = UserManager.UserValidator as UserValidator<ApplicationUser>; userValidator.AllowOnlyAlphanumericUserNames = false; }