c# - 不同的用户名和电子邮件导致登录在 ASP NET CORE 2.1 中失败
问题描述
我正在开发一个使用带有个人身份验证的 ASPNET Core 2.1 的解决方案。我能够实现一个种子类,它创建身份角色、管理员用户并在主机第一次运行时为管理员用户分配一个角色。第一次运行后,我检查了数据库,一切正常。我不喜欢“你好,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.");
}
}
如果我将用户名更改为与电子邮件地址具有相同的字符串,我可以毫无问题地登录。
我不想使用用户名登录。我想使用电子邮件地址登录,但在欢迎消息中显示不同的字符串,例如名称。
解决方案
默认约定是IdentityUser
针对“用户名”字段登录。
您可以通过关闭“AllowOnlyAlphanumericUserNames”允许电子邮件地址作为用户名
UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }
在此处查看答案和用法
推荐阅读
- java - 使用 LinkedHashMap 到列表时映射值不正确
- macos - 模拟 docker 容器之间的网络请求超时
- android - 当您执行滑动手势并且在手势结束后继续滑动时,它叫什么
- owl - 将 Protege 限制为 RDF 模式
- django - Django Python 查询连接
- mule - 如何从 Mule 4 中的数组中获取值
- reactjs - 如何在 React 中使用图像构造函数?
- google-apps-script - 如何依次运行多个脚本?
- mongodb - 更新具有最大值的 n 个元素
- odbc - MariaDB ODBC 连接器 3.1.4(32 位),带有 BEGIN NOT ATOMIC