SignInResult.RequiresTwoFactor始终返回false

时间:2019-08-22 01:50:42

标签: .net-core asp.net-identity identity asp.net-core-2.2 .net-core-2.2

在我的dotnet core 2.2应用程序中,我试图启用两因素身份验证。在启动类中,我创建了一个种子数据函数,该函数将生成一个样本用户。我使用UserManager创建用户,然后设置两个因素要求标志。但是,当用户登录时,它总是成功,并且永远不会到达RequireTwoFactor标志if语句。

我很确定我的启动课程中缺少某些内容。

感谢所有帮助。

启动类Configure方法

services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
    options.Tokens.AuthenticatorTokenProvider = "email";
});

种子数据方法

var User = new IdentityUser() { UserName = email, Email = email };
await UserManager.CreateAsync(User, password);
await UserManager.SetTwoFactorEnabledAsync(User, true);

登录页面

if (ModelState.IsValid)
{
    var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
    if (result.Succeeded)
    {
        _logger.LogInformation("User logged in.");
        return LocalRedirect(returnUrl);
    }
    if (result.RequiresTwoFactor)
    {
        return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
    }
    if (result.IsLockedOut)
    {
        _logger.LogWarning("User account locked out.");
        return RedirectToPage("./Lockout");
    }
    else
    {
        ModelState.AddModelError(string.Empty, "Invalid login attempt.");
        return Page();
    }
}

2 个答案:

答案 0 :(得分:1)

我们遇到了同样的问题。 在更改netcore的版本之前,我们的团队注意到尚未验证用户的电子邮件。 他们验证了电子邮件,问题得到解决。

答案 1 :(得分:0)

我遇到了同样的问题。

今天,我更新为.net核心3.0.100-rc1-014190,此问题已解决。因此,如果在ASPNetUsers表中设置了“ TwoFactorEnabled”标志,PasswordSignInAsync将返回带有RequiresTwoFactor的结果