ASP.Net Core(MVC6)无法使用种子用户登录

时间:2016-02-22 02:53:38

标签: asp.net-core asp.net-core-mvc

这就是我做到的。

public class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        var context = serviceProvider.GetService<ApplicationDbContext>();
        var userManager = serviceProvider.GetService<UserManager<ApplicationUser>>();

        var user0 = new ApplicationUser { UserName = "bob", Email = "bob@asd.com" };
        var result = userManager.CreateAsync(user0, "Password1!").Result;

    }
}

initialize方法在最后的Configure方法的Startup.cs中运行:

SeedData.Initialize(app.ApplicationServices);

当我查看数据库时,用户就像预期的那样。当我尝试登录时,我的登录尝试无效。当我尝试使用相同的电子邮件地址注册用户时,它不会检测到重复的条目并添加具有相同地址的新用户。

UserManager似乎在Controller的上下文中表现不同。我如何才能正确创建种子用户,以便我可以使用它们登录?

Id  AccessFailedCount   ConcurrencyStamp    Email   EmailConfirmed  LockoutEnabled  LockoutEnd  NormalizedEmail NormalizedUserName  PasswordHash    PhoneNumber PhoneNumberConfirmed    SecurityStamp   TwoFactorEnabled    UserName
e3ff23eb-5db9-4eb3-871e-e95232178e1c    0   241c36e0-b0a9-4c86-af98-6d38132947e9    bob@asd.com 0   1   NULL    BOB@ASD.COM BOB AQAAAAEAACcQAAAAECFF4uxt8kT3nZgU9nhfticduyI3OXAxCZg+XJT/0Id280Tgf6B9cCY+Il6beRTFWw==    NULL    0   3e9a2185-d248-4589-aa30-ecbb145787ff    0   bob

2 个答案:

答案 0 :(得分:2)

我刚刚遇到过这个问题。

如下面的代码


    var userManager = serviceProvider.GetService>();
    ApplicationUser user0, user1;
    if (context.Users.Any(u => u.UserName == "nemo@mail.com"))
        user0 = context.Users.First(u => u.UserName == "nemo@mail.com");
    else
    {
        user0 = new ApplicationUser { UserName = "nemo@mail.com", Email = "nemo@mail.com" };
        var result = userManager.CreateAsync(user0, "Abc123").Result;
    }
    if (context.Users.Any(u => u.UserName == "teresa@mail.com"))
        user1 = context.Users.First(u => u.UserName == "teresa@mail.com");
    else
    {
        user1 = new ApplicationUser { UserName = "teresa@mail.com", Email = "teresa@mail.com" };
        var result = userManager.CreateAsync(user1, "Abc123").Result;
    }

当我使用“teresa@mail.com”登录时,登录将通过“无效登录尝试”消息拒绝。

但是使用“nemo@mail.com”登录将成功。

结果,ASP.net似乎使用UserName&amp;登录验证密码。

答案 1 :(得分:0)

我可以在评论中看到“电子邮件地址作为用户名”,但是我发布了这个答案给任何遇到相同症状的人。我发现当使用具有不同用户名和电子邮件地址的用户播种数据库时,我无法以该用户身份登录。在网站上注册新用户工作正常,我可以以我注册的用户身份登录。查看种子用户和注册用户的数据库,我看到不同之处在于注册用户的电子邮件地址是其用户名。

所以,是的,在Visual Studio模板上构建的应用程序假设您希望我们将电子邮件地址用作用户名。查看AccountController类 - &gt; Login操作方法(POST)。它使用第一个参数SignInManager.PasswordSignInAsync()调用model.Email。将鼠标悬停在该方法上或右键单击转到定义,您将看到第一个参数应为string userName

所以你有两个选择:

  1. 修改登录所涉及的控制器,视图和视图模型,以允许用户在登录时输入用户名。
  2. 将用户引入数据库时​​,请使用电子邮件地址作为用户名。