- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有关新的 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/
有关新的 Microsoft 身份框架的文档似乎有点稀疏。我目前正在修改标准项目模板,在尝试使用两因素身份验证登录用户时遇到了一些奇怪的行为。 我们只允许通过短信进行 2FA,因此我绕过了用户选择他们
我正在通过依赖注入(inject)使用 SignInManager 和 AuthenticationManager。除 SendTwoFactorCodeAsync 外,一切正常 代码如下: 实用程序
我是一名优秀的程序员,十分优秀!