gpt4 book ai didi

c# - SendTwoFactorCodeAsync 在成功登录后返回 'UserId not found',使用具有依赖性的 SignManager

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:24 24 4
gpt4 key购买 nike

我正在通过依赖注入(inject)使用 SignInManager 和 AuthenticationManager。除 SendTwoFactorCodeAsync

外,一切正常

代码如下:

实用程序配置

container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();

账户管理员

var myUser = await UserManagerService.Value.FindAsync(model.Mobile, model.Password);
if (myUser != null)
{
var result = await SignInManager.Value.PasswordSignInAsync(model.Mobile, model.Password, false, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
{
//success code
}
case SignInStatus.RequiresVerification:
{
var code = await UserManagerService.Value.GenerateTwoFactorTokenAsync(myUser.Id, ConfigurationManager.AppSettings["PhoneCodeProvider"]);
var send = await SignInManager.Value.SendTwoFactorCodeAsync(ConfigurationManager.AppSettings["PhoneCodeProvider"]); //here throughing exception
if (send)
{
SmsHelper.Value.SendSmsBySmsBatch(user.UserName, Constant.Instance().ProductName, myUser.UserName, "Code is " + code, true);
return RedirectToAction("TwoFactorCode", new { Provider = ConfigurationManager.AppSettings["PhoneCodeProvider"], ReturnUrl = returnUrl, RememberMe = false });
}
}
break;
---------------
}

也试过这个:

var userId = await SignInManager.Value.GetVerifiedUserIdAsync(); // this is returning 0
var user = await UserManagerService.Value.FindByIdAsync(userId);
if (user != null)
{
var code = await UserManagerService.Value.GenerateTwoFactorTokenAsync(myUser.Id, ConfigurationManager.AppSettings["PhoneCodeProvider"]);
var send = await SignInManager.Value.SendTwoFactorCodeAsync(ConfigurationManager.AppSettings["PhoneCodeProvider"]); //here throughing exception
if (send)
{
SmsHelper.Value.SendSmsBySmsBatch(user.UserName, Constant.Instance().ProductName, user.UserName, "Your security code is " + code, true);
return RedirectToAction("TwoFactorCode", new { Provider = ConfigurationManager.AppSettings["PhoneCodeProvider"], ReturnUrl = returnUrl, RememberMe = false });
}
}

奇怪的是,第一次尝试我遇到了这个问题,第二次尝试它工作正常(完美地返回所有结果)..我再次注销并尝试..第一次遇到问题第二次尝试它工作。

无法追踪此失败的原因,什么是解决此问题的最佳方法

最佳答案

我得到了完全相同的错误。我尝试添加案例 SignInStatus.RequiresVerification: Thread.Sleep(500)看看是否只是延迟但无济于事。

它需要重定向,因为 SendTwoFactorCodeAsync 检查是否 Request.IsAuthernticated。请求不是,但有一个有效的登录。

这是一个错误,应该在github上报告

关于c# - SendTwoFactorCodeAsync 在成功登录后返回 'UserId not found',使用具有依赖性的 SignManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45779673/

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