我正在使用新的ASP.NET身份(RTM),我想知道如何将注册和登录从用户名更改为电子邮件 .
我的想法是,我希望我的用户使用他们的电子邮件和密码注册(也可以使用外部登录获取电子邮件),并在顶部设置显示名称/用户名 .
我查看了IdentityUser,我可以看到UserName存在,但是因为它包含在ASP.Net Identity中,无法更改 .
我知道我可以使用'UserName'作为电子邮件,使用自定义验证器,然后为ApplicationUser添加一个名为DisplayName的额外属性,但这更像是一个hack而不是解决方案 .
我希望我的问题很明确 . 提前致谢 .
7 回答
如果你真的想用电子邮件地址登录,那么,恕我直言,你建议的“黑客”是最好的办法 . 因为,如果你坚持“正确地做”,至少你必须这样做
显然修改了数据库模式
自己确保用户名唯一性(你可以让数据库约束/索引为你做这个,但是你必须找到一个很好的方法来处理错误并将它们报告给用户)
找到一个很好的替代品,只需在代码中编写"User.Identity.UserName"即可
可能更多
另一方面,如果您决定“破解”您需要的UserName字段
修改RegisterViewModel验证(将[EmailAddress]添加到UserName属性),可能会稍微自定义[Display(Name = ...)]等 .
确保AccountController中使用的UserManager.UserValidator实例允许在电子邮件地址中使用特殊字符 . 为此,请确保其非默认构造函数如下所示:
我希望这可以帮助您权衡两种方法的优缺点,并提出最佳解决方案 . 祝好运!
派对迟到了,但我以为我会扔掉0.02美元 .
虽然
UserName
和Email
都是IdentityUser
的一部分并且因此是必需的,但请注意它们都标记为virtual
. 如果您希望UserName
和Email
成为电子邮件地址,请让ApplicationUser模型封装逻辑,如下所示:然后在视图模型中,仅显示单个属性并将其映射到/或
ApplicationUser
实例中,确保使用[Required]
和[EmailAddress]
属性修饰视图模型属性 .正如其他人提到的那样,你需要确保
AllowOnlyAlphanumericUserNames
设置为false
为UserManager
的UserValidator
,但是你可以使用VS2013中最新的网页模板开箱即用 .我目前正在为Identity 1.1模板开发此功能,该模板将切换到电子邮件并添加帐户确认/忘记密码功能,我们考虑的两个选项是hack(使用用户名作为验证的电子邮件)并添加其他电子邮件字段这与我们倾向于的用户名是分开的 .
可能会在1.1中向UserManager添加一些特定于电子邮件的api:
更改UserManager对象的UserValidator属性:
正如您可能已经发现的那样(并且可以预期),2014年3月发布的ASP.NET Identity 2.0.0在框架中添加了此功能 .
公告:http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
完整示例和教程,包括帐户确认:http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
在处理类似问题时,我发现最简单的解决方案是将Username输入标记为“Email”,然后在onCreating期间手动设置Membership电子邮件 .
我得到了这个工作 .
首先转到accountViewModels并为UserName添加一个Property
修改注册视图后添加用户名属性
完成后,修改您的登录视图
这就是你所需要的一切 . 这样,您可以使用UserName而不是使用电子邮件地址登录 .