SignInResult.RequiresTwoFactor 始终返回 false

sro*_*e98 5 identity asp.net-identity .net-core 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";
});
Run Code Online (Sandbox Code Playgroud)

种子数据法

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

登录页面

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

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


PvP*_*ten -1

我曾经也有过一样的问题。

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