为什么Asp.Net标识中的SignInManager.HasBeenVerifiedAsync返回false?

时间:2017-10-05 13:06:58

标签: asp.net asp.net-identity two-factor-authentication

达到的智慧以此结束。

我正在尝试自动化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并且登录失败。

有关此方法的文档似乎非常稀少。任何可以帮忙吗?我根本无法找到解决这个问题的方法。

0 个答案:

没有答案