在我的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();
}
}
答案 0 :(得分:1)
我们遇到了同样的问题。 在更改netcore的版本之前,我们的团队注意到尚未验证用户的电子邮件。 他们验证了电子邮件,问题得到解决。
答案 1 :(得分:0)
我遇到了同样的问题。
今天,我更新为.net核心3.0.100-rc1-014190
,此问题已解决。因此,如果在ASPNetUsers表中设置了“ TwoFactorEnabled”标志,PasswordSignInAsync将返回带有RequiresTwoFactor的结果