.net core SignInResult.RequiresTwoFactor始终返回false

.net core SignInResult.RequiresTwoFactor始终返回false,.net-core,asp.net-identity,identity,asp.net-core-2.2,.net-core-2.2,.net Core,Asp.net Identity,Identity,Asp.net Core 2.2,.net Core 2.2,在我的dotnetcore2.2应用程序中,我试图启用双因素身份验证。在startup类中,我创建了一个种子数据函数,该函数将生成一个示例用户。我使用UserManager创建用户,然后设置双因素required标志。但是当用户登录时,它总是成功的,并且永远不会达到requiretwafactor标志if语句 我很确定我在创业课上遗漏了一些东西 感谢所有的帮助 启动类配置方法 services.AddIdentity<IdentityUser, IdentityRole>(optio

在我的dotnetcore2.2应用程序中,我试图启用双因素身份验证。在startup类中,我创建了一个种子数据函数,该函数将生成一个示例用户。我使用UserManager创建用户,然后设置双因素required标志。但是当用户登录时,它总是成功的,并且永远不会达到requiretwafactor标志if语句

我很确定我在创业课上遗漏了一些东西

感谢所有的帮助

启动类配置方法

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

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();
    }
}

我也有同样的问题

今天我更新到.net core
3.0.100-rc1-014190
,问题解决了。因此,如果在ASPNetUsers表PasswordSignInAsync中设置了“TwoFactorEnabled”标志,则会返回结果,其中包含RequiresTwoFactor,我们遇到了相同的问题。 在更改netcore的版本之前,我的团队注意到用户的电子邮件尚未验证。
他们验证了电子邮件,问题得到了解决。

是的,我必须将
emailconfirm=true
添加到
twofacturenabled=true
,以便数据库中的特定用户达到
requiretwofactor
登录结果。在我当前的设置(dotnet core 3.1)中,
phonenumberconfirfied
值似乎根本不会影响登录结果。CheckPasswordSignInAsync在.NET5下是否仍正常工作?在我的例子中,CheckPasswordSignanAsync始终返回成功,即使此用户的EmailConfirmed和TwoFactoryEnabled都设置为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();
    }
}