首页 > 解决方案 > 不同的用户名和电子邮件导致登录在 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.");
    }
}

如果我将用户名更改为与电子邮件地址具有相同的字符串,我可以毫无问题地登录。

我不想使用用户名登录。我想使用电子邮件地址登录,但在欢迎消息中显示不同的字符串,例如名称。

标签: c#asp.net-coreasp.net-core-identity

解决方案


默认约定是IdentityUser针对“用户名”字段登录。

您可以通过关闭“AllowOnlyAlphanumericUserNames”允许电子邮件地址作为用户名

UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }

在此处查看答案和用法


推荐阅读