teh*_*ner 24 asp.net asp.net-mvc-5 asp.net-identity
我正在使用新的ASP.NET身份(RTM),我想知道如何将注册和登录从用户名更改为电子邮件.
我的想法是,我希望我的用户使用他们的电子邮件和密码注册(也可以使用外部登录获取电子邮件),并在顶部设置显示名称/用户名.
我查看了IdentityUser,我可以看到UserName存在,但是因为它包含在ASP.Net Identity中,无法更改.
我知道我可以使用'UserName'作为电子邮件,使用自定义验证器,然后为ApplicationUser添加一个名为DisplayName的额外属性,但这更像是一个hack而不是解决方案.
我希望我的问题很明确.提前致谢.
roo*_*ess 23
如果你真的想用电子邮件地址登录,那么,恕我直言,你建议的"黑客"是最好的办法.因为,如果你坚持"正确地做",至少你必须这样做
另一方面,如果您决定"破解"您需要的UserName字段
确保AccountController中使用的UserManager.UserValidator实例允许在电子邮件地址中使用特殊字符.为此,请确保其非默认构造函数如下所示:
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
var userValidator = UserManager.UserValidator as UserValidator<ApplicationUser>;
userValidator.AllowOnlyAlphanumericUserNames = false;
}
Run Code Online (Sandbox Code Playgroud)我希望这可以帮助您权衡两种方法的优缺点,并提出最佳解决方案.祝好运!
派对迟到了,但我以为我会扔掉0.02美元.
虽然这是真的,UserName并且Email是两个部分IdentityUser,因此是必需的,请注意,它们都标记为virtual.如果您想要UserName并Email成为电子邮件地址,请让ApplicationUser模型封装逻辑,如下所示:
public class ApplicationUser : IdentityUser
{
private string _userNameEmailBackingField;
public override string UserName
{
get { return _userNameEmailBackingField; }
set { _userNameEmailBackingField = value; }
}
public override string Email
{
get { return _userNameEmailBackingField; }
set { _userNameEmailBackingField = value; }
}
//The rest of your ApplicationUser logic
}
Run Code Online (Sandbox Code Playgroud)
然后在视图模型中,仅显示单个属性并将其映射到/或在您的ApplicationUser实例中,确保使用[Required]和[EmailAddress]属性装饰视图模型属性.
正如其他人所提到的那样,你需要确保AllowOnlyAlphanumericUserNames设置false为UserManager's UserValidator,但我在VS2013中使用最新的Web模板开箱即用.
我目前正在为Identity 1.1模板开发此功能,该模板将切换到电子邮件并添加帐户确认/忘记密码功能,我们考虑的两个选项是hack(使用用户名作为验证的电子邮件)并添加其他电子邮件字段这与我们倾向于的用户名是分开的.
可能会在1.1中向UserManager添加一些特定于电子邮件的api:
FindByEmail
SetEmail
GetEmail
Run Code Online (Sandbox Code Playgroud)
更改UserManager对象的UserValidator属性:
public class UserManager : UserManager<User>
{
public IUserStore<User> Users { get; private set; }
public UserManager(IUserStore<User> store) : base(store)
{
Users = store;
UserValidator = new UserValidator<User>(this) {AllowOnlyAlphanumericUserNames = false};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15059 次 |
| 最近记录: |