我在不使用accountController的情况下创建用户,在成功创建用户后,我去尝试与该用户的电子邮件和密码登录,并且它一直都在失败,并且我不知道为什么会失败,因为我正在使用相同的密码创建用户。
在不使用帐户controller的情况下创建用户时,我可能会做错什么吗?我还将新用户添加到Aspnetuser表
代码是
AspNetUser user = new AspNetUser();
user.UserName = ahl.AccountHolderName;
user.SecurityStamp = Guid.NewGuid().ToString();
user.PasswordHash = pHasher.HashPassword(ahl.AccountHolderPassword);
user.Email = ahl.AccountHolderEmail;
user.Id = Guid.NewGuid().ToString();
HWC.AspNetUsers.Add(user);
HWC.SaveChanges();
任何人都问为什么我只是不使用帐户控制器,因为我不想总是依靠该控制器。
编辑
这是登录
时正在调用的登录代码public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
问题是,您一直在为用户名使用两个不同的值,并为新创建的用户使用电子邮件。
SignInManager.PasswordSignInAsync() check `userName` and `Password`, not `Email` and `Password` which you are passing in your code.
创建用户时,将user.UserName = ahl.AccountHolderName;
代码更改为user.UserName = ahl.AccountHolderEmail;
,然后将其起作用。