这是两个因素的第一部分,它创建代码令牌并将其发送到用户的电子邮件。我删除了用户两个因素未激活的检查
` [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" });
}`
`
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");
`
如果还有什么需要的话。请通知我。
可能有很多原因。我想到的几种情况如下:
希望这些对您有所帮助。