是什么原因导致 SignInManager.SendTwoFactorCodeAsync 始终返回 false?

问题描述 投票:0回答:1

我正在进行双因素身份验证登录和signinManager。无论我做什么,TwofactorsignInAsync 都会返回 false..这是我用于双因素登录的两个操作

这是两个因素的第一部分,它创建代码令牌并将其发送到用户的电子邮件。我删除了用户两个因素未激活的检查

` [HttpPost("Login")]
        public async Task<IActionResult> Login(LoginUserDTO credntials)
        {
            var requiredEmail = await userManager.FindByEmailAsync(credntials.Email);
         
            if (requiredEmail.TwoFactorEnabled)
            {
                //enablig twofactor
                //  await userManager.SetTwoFactorEnabledAsync(requiredEmail, true);

                await signInManager.SignOutAsync();
                await signInManager.PasswordSignInAsync(requiredEmail, credntials.Password, false,      true);

                if (requiredEmail == null || !await userManager.CheckPasswordAsync(requiredEmail, credntials.Password))
                {
                    return StatusCode(StatusCodes.Status401Unauthorized,
                    new { Status = "Failed", Message = "Email or Password is incorrect" });


                }
                var twoFactorToken = await userManager.GenerateTwoFactorTokenAsync(requiredEmail, "Email");
                var message = new Message(new string[] { requiredEmail.Email }, "OTP Confirmation", twoFactorToken);
                emailService.SendEmail(message);
                return StatusCode(StatusCodes.Status200OK, new Models.Response { Status = "Success", Message = $"We have sent an OTP to your Email {requiredEmail.Email}" });

            }

            var expDate = DateTime.Now.AddDays(2);
            var token = await GenerateJwtToken(requiredEmail);
            var Message = "User logged in";
            return Ok(new TokenDTO
            {
                Token = token,
                Exp = expDate,
                Message = Message
            });

        }

       `[HttpPost("Logintwo")]
        public async Task<IActionResult> LoginwithOTP(LoginUser2FDTO loginUser2FDTO)
        {
        //      var user = await signInManager.GetTwoFactorAuthenticationUserAsync();
            var requiredEmail = await userManager.FindByNameAsync(loginUser2FDTO.Username);

            var signIn = await signInManager.TwoFactorSignInAsync("Email", loginUser2FDTO.Code, false, false);

            if (requiredEmail == null)
            {
                var error = new
                {
                    ErrorMessage = "email is not found",
                };
                return Unauthorized(error);
            }
            //  var signIn = await signInManager.TwoFactorSignInAsync(requiredEmail.Email, code, false, false);
            if (signIn.Succeeded)
            {   

                var expDate = DateTime.Now.AddDays(2);
                var token = await GenerateJwtToken(requiredEmail);
                var Message = "User logged in";
                return Ok(new TokenDTO
                {
                    Token = token,
                    Exp = expDate,
                    Message = Message
                });
            }
            return StatusCode(StatusCodes.Status401Unauthorized,
               new { Status = "Failed", Message = "Invalid Code or UserName please re-Login" });

        }`


这是program.cs中的一个片段,我认为这可能是问题所在

`
 builder.Services.AddIdentity<ApplicationUser, IdentityRole>(
    options =>
    {
        options.SignIn.RequireConfirmedAccount = false;
        options.SignIn.RequireConfirmedPhoneNumber = false;
        options.User.RequireUniqueEmail = true;
        options.SignIn.RequireConfirmedEmail = false;
        options.Lockout.MaxFailedAccessAttempts = 3;
        options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);
        options.Password.RequireNonAlphanumeric = false;

    }
    ).AddEntityFrameworkStores<ITIStore>().AddTokenProvider<EmailTokenProvider<ApplicationUser>>("Email");
`

如果还有什么需要的话。请通知我。

c# asp.net .net asp.net-web-api two-factor-authentication
1个回答
0
投票

可能有很多原因。我想到的几种情况如下:

希望这些对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.