使用管理员用户播种数据库 - 但他无法登录

时间:2017-09-13 21:20:34

标签: c# asp.net-mvc authentication

我正在创建一个MVC应用程序,并且希望使用一个管理员用户来播种数据库,该用户可以创建其他用户。我目前正在做如下:

    ApplicationUser admin = new ApplicationUser
    {
        UserName = "whatever",
        Email = "whatever@mailinator.com",
        EmailConfirmed = true
    };

    string pwd = "password";

    var chkUser = await _userManager.CreateAsync(admin, pwd);
    if (chkUser.Succeeded)
    {
        await _userManager.AddToRoleAsync(admin, Constants.Roles.Administrator);
    }

这将在数据库中创建一个用户,与预期完全一样。但是当我尝试使用该用户登录时,我失败了。 Screenshot of the failure

这对我来说尤其令人费解,因为当用户通过GUI注册时我几乎使用完全相同的代码,但一切都运行正常。

// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
           a bunch of stuff regarding sending a confirmation email
            return RedirectToLocal(returnUrl);
        }
        AddErrors(result);
    }
     // If we got this far, something failed, redisplay form
    return View(model);'

在这两种方法中,变量_userManager的类型为UserManager<ApplicationUser>,并通过依赖注入提供给我的方法。

1 个答案:

答案 0 :(得分:0)

当用户登录时,会按用户名查找。对于通过GUI创建的用户,他们的电子邮件地址和用户名是相同的。但我的种子&#34;用户的用户名与其电子邮件地址不同。因此,当他尝试登录时,系统会尝试查找用户名与我的种子用户电子邮件地址匹配的用户 - 并失败。