我正在使用ASPNET Core 2.1和个人身份验证解决方案 . 我能够实现一个创建Identity角色的种子类,admin用户,并在主机第一次运行时为admin用户分配一个角色 . 第一次运行后,我检查数据库,一切正常 . 我不喜欢'Hello,userdummy@domain.com'欢迎格式消息,因此我打算在将来从电子邮件格式转换为更友好的用户名时更改此信息 . 因此,我使用来自电子邮件地址的其他用户名 . 当我分配这个不同的用户名时,登录失败,但如果我切换回用于用户名和电子邮件字段的电子邮件,登录工作 . 我想要一个与电子邮件地址不同的用户名关于为什么会发生这种情况的任何想法?
这是我的种子类中创建新用户的一段代码:
if (!_dbContext.Users.Any()) // if users table is empty
{
// instantiate a user-store class
var _userStore = new UserStore<IdentityUser>(_dbContext);
// create a new user object with a different username
var admin = new IdentityUser
{
Email = "admin@admin.com",
UserName = "Administrador" // it makes login to fail
};
try
{
// ask the store-guy to create a new admin user with the given ridiculous password :D
var result = await _userStore.CreateAsync(admin,"123456");
}
catch (System.Exception ex)
{
_logger.Error(ex, "Sorry. Something went wrong here.");
}
}
如果我将用户名更改为与电子邮件地址相同的字符串,我可以毫无问题地登录 .
我不想使用用户名登录 . 我想使用电子邮件地址登录,但在 welcome message 中显示不同的字符串,如名称 .
2 回答
默认约定是
IdentityUser
针对'UserName`字段登录 .您可以通过关闭“AllowOnlyAlphanumericUserNames”允许电子邮件地址作为用户名
UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }
查看答案和用法here
作为我的问题的最终解决方案,在你们的帮助下,将更改注册的验证规则和登录表单指向UserName(根据用户表检查真实字段) or 尝试创建声明并使用它作为欢迎和其他消息中显示的名称 . 最后一个是有效,简单且无害的解决方法 . 谢谢你们 .