gpt4 book ai didi

c# - 是什么导致 SignInManager.SendTwoFactorCodeAsync 返回 false?

转载 作者:行者123 更新时间:2023-12-01 22:41:24 25 4
gpt4 key购买 nike

有关新的 Microsoft 身份框架的文档似乎有点稀疏。我目前正在修改标准项目模板,在尝试使用两因素身份验证登录用户时遇到了一些奇怪的行为。

我们只允许通过短信进行 2FA,因此我绕过了用户选择他们想要的代码方式的选项。相反,当具有 2FA 和经过验证的电话号码的用户尝试登录时,他们会触发以下代码:

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
case SignInStatus.RequiresVerification:
if (!await SignInManager.SendTwoFactorCodeAsync("Phone Code"))
{
TempData["ErrorMessage"] = "We could not verify your account. Please try again.";
return RedirectToAction("Error", "Error");
}
return RedirectToAction("VerifyCode", new { Provider = "Phone Code", ReturnUrl = returnUrl, RememberMe = model.RememberMe });
// other cases
}

大多数时候,这都可以正常工作。但用户注销后,当他们第一次重新登录时,SendTwoFactorCodeAsync 返回 false,并将他们定向到错误页面。

哪些情况会导致 SendTwoFactorCodeAsync 首次为注销用户调用时始终失败?

最佳答案

我忘记了 Owin 中的 O 代表 Open。源代码可以回答这个问题:

public virtual async Task<bool> SendTwoFactorCodeAsync(string provider)
{
var userId = await GetVerifiedUserIdAsync().WithCurrentCulture();
if (userId == null)
{
return false;
}

var token = await UserManager.GenerateTwoFactorTokenAsync(userId, provider).WithCurrentCulture();
// See IdentityConfig.cs to plug in Email/SMS services to actually send the code
await UserManager.NotifyTwoFactorTokenAsync(userId, provider, token).WithCurrentCulture();
return true;
}

这来自 SignInManager,因此对 GetVerifiedUserIdAsync() 的调用与从应用程序调用 SignInManager.GetVerifiedUserIdAsync() 相同.

关于c# - 是什么导致 SignInManager.SendTwoFactorCodeAsync 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com