public async Task <IActionResult> TwoFactor(TwoFactorModel model) { var result = await HttpContext.AuthenticateAsync(IdentityConstants.TwoFactorUserIdScheme); if (!result.Succeeded) { ModelState.AddModelError("", "Your login request has expired, please start over."); return(View()); } if (ModelState.IsValid) { var user = await _userManager.FindByIdAsync(result.Principal.FindFirstValue("sub")); if (user != null) { var isValid = await _userManager.VerifyTwoFactorTokenAsync(user, result.Principal.FindFirstValue("amr"), model.Token); if (isValid) { await HttpContext.SignOutAsync(IdentityConstants.TwoFactorUserIdScheme); var claimsPrincipal = await _claimsPrincipalFactory.CreateAsync(user); var appProps = new AuthenticationProperties { IsPersistent = true }; await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme, claimsPrincipal, appProps); var rememberMeProps = new AuthenticationProperties { IsPersistent = true }; var rememberMePrincipal = Store2FA(user.Id, _userManager.Options.Tokens.AuthenticatorTokenProvider, IdentityConstants.TwoFactorRememberMeScheme); await HttpContext.SignInAsync(IdentityConstants.TwoFactorRememberMeScheme, rememberMePrincipal, rememberMeProps); return(RedirectToAction("Index")); } ModelState.AddModelError("", "Invalid token"); return(View()); } ModelState.AddModelError("", "Invalid Request"); } return(View()); }
public IActionResult TwoFactor(TwoFactorModel model) { return(View()); }