我正在尝试使用UserName
通过PasswordSignInAsync
登录,但结果甚至是False
,这是我的代码:
public async Task<IActionResult> Login(LoginViewModel vm)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByEmailAsync(vm.Email);
var result = await _signInManager.PasswordSignInAsync(user.UserName, vm.Password, vm.RememberMe, false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Wrong Credentials!");
return View(vm);
}
return View(vm);
}
因此基本上在我的View
中,我填写了电子邮件和密码字段,并且user
对象中正确地填充了以下信息:
UserName = "some_username";
Email = "foo@gmail.com";
我尝试在UserName
的第一个参数中同时通过Email
和PasswordSignInAsync
,但是我无法解决此问题。
我在这里也看到了其他类似的问题,但我不知道该如何解决。
答案 0 :(得分:1)
您的代码很好。不过,由于您已经在获取用户,因此可以直接使用它:
await _signinManager.PasswordSignInAsync(user, vm.Password, vm.RememberMe, false);
重要的是要意识到此方法可能由于多种原因而失败,而不仅仅是用户名/密码错误。可能需要2FA(result.RequiresTwoFactor
)或用户可能被锁定(result.IsLockedOut
)。此外,如果您需要电子邮件验证,则所有登录尝试都将失败,直到电子邮件被验证(result.IsNotAllowed
)。您应该检查所有这些情况并适当处理。