Asp.net mvc 无法通过用户名登录

Asp.net mvc 无法通过用户名登录,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我试图使用PasswordSignInAsync通过用户名登录,但结果甚至是错误的,这是我的代码: public async Task<IActionResult> Login(LoginViewModel vm) { if (ModelState.IsValid) { var user = await _userManager.FindByEmailAsync(vm.Email); var result = await _signIn

我试图使用PasswordSignInAsync通过用户名登录,但结果甚至是错误的,这是我的代码:

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);
}
我试图在PasswordSignInAsync的第一个参数中传递用户名和电子邮件,但我无法修复此问题


我在这里也看到了其他类似的问题,但我不明白如何解决这个问题。

您的代码很好。但是,由于您已经获取了用户,您可以直接使用:

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

重要的是要认识到,这种方法可能由于多种原因而失败,而不仅仅是用户名/密码不正确。2FA可能是必需的result.RequiresTwoFactor,或者用户可能被锁定result.IsLockedOut。此外,如果您需要电子邮件验证,则在验证电子邮件结果之前,所有登录尝试都将失败。不允许。您应该检查所有这些条件,并适当地处理它们。

感谢您的回答,查看表中的字段emailconfirm为true,这两个因素未启用,因此我真的不知道。我试过你的代码,但同样的问题,不允许也适用于电话号码验证。
await _signinManager.PasswordSignInAsync(user, vm.Password, vm.RememberMe, false);