我正在创建一个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>
,并通过依赖注入提供给我的方法。
答案 0 :(得分:0)
当用户登录时,会按用户名查找。对于通过GUI创建的用户,他们的电子邮件地址和用户名是相同的。但我的种子&#34;用户的用户名与其电子邮件地址不同。因此,当他尝试登录时,系统会尝试查找用户名与我的种子用户电子邮件地址匹配的用户 - 并失败。