达到的智慧以此结束。
我正在尝试自动化Asp.Net身份中的双因素身份验证过程,这样我们就不会每次都向用户挑战安全代码。
目前,代码如下所示:
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
// other cases
case SignInStatus.RequiresVerification:
int challengeFrequency = Convert.ToInt16(ConfigurationManager.AppSettings["ChallengeFrequency"]);
Random rnd = new Random();
if (rnd.Next(1, challengeFrequency + 1) == 1)
{
return RedirectToAction("SendCode", new { returnUrl = returnUrl });
}
else
{
var token = await UserManager.GenerateTwoFactorTokenAsync(user.Id, "Phone Code");
await SignInManager.HasBeenVerifiedAsync();
await SignInManager.TwoFactorSignInAsync("Phone Code", token, false, false);
return RedirectToLocal(returnUrl);
}
}
据我所知,这是在向用户发送短信电话的过程中使用的相同功能调用序列。
在我的代码中生成令牌,但是对SignInManager.HasBeenVerifiedAsync()
的调用似乎表现不正常。有时它返回true并且用户根据需要登录。其他时候它返回false并且登录失败。有时它会返回null并且登录失败。
有关此方法的文档似乎非常稀少。任何请可以帮忙吗?我根本无法找到解决这个问题的方法。