无法通过用户名登录

时间:2018-08-23 14:42:45

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

我正在尝试使用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的第一个参数中同时通过EmailPasswordSignInAsync,但是我无法解决此问题。

我在这里也看到了其他类似的问题,但我不知道该如何解决。

1 个答案:

答案 0 :(得分:1)

您的代码很好。不过,由于您已经在获取用户,因此可以直接使用它:

await _signinManager.PasswordSignInAsync(user, vm.Password, vm.RememberMe, false);

重要的是要意识到此方法可能由于多种原因而失败,而不仅仅是用户名/密码错误。可能需要2FA(result.RequiresTwoFactor)或用户可能被锁定(result.IsLockedOut)。此外,如果您需要电子邮件验证,则所有登录尝试都将失败,直到电子邮件被验证(result.IsNotAllowed)。您应该检查所有这些情况并适当处理。