Buongiorno.
Per questioni di localizzazione ho preso da un repository un "sample" con autenticazione invece che tramite Razor Pages (effettuando il classico scaffolding di Identity) tramite MVC.
Funziona bene la parte basica, però poi ci ho voluto aggiungere la 2FA e qui ci casca l'asino, perchè spostando codice dallo scaffolding verso il mio controller nel momento in cui questo arriva al redirect di fatto non lo esegue e non riesco a capire perchè.
Ad ogni buon fine allego estratti del codice:
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if(ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if(result.Succeeded)
{
_logger.LogInformation(1, "User logged in.");
return RedirectToLocal(returnUrl);
}
if(result.RequiresTwoFactor)
{
return RedirectToAction("LoginWith2FA", new { RemMe = model , ReturnUrl = returnUrl });
}
if(result.IsLockedOut)
{
_logger.LogWarning(2, "User account locked out.");
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
// GET: /Account/LoginWith2FA
[HttpGet]
public async Task<IActionResult> LoginWith2FA(LoginViewModel RemMe, string returnUrl = null)
{
// Ensure the user has gone through the username & password screen first
var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
if(user == null)
{
throw new InvalidOperationException($"Unable to load two-factor authentication user.");
}
ViewData["ReturnUrl"] = returnUrl;
return View(RemMe);
}
Di fatto mi viene restituita la pagina di login con questo URL: http://localhost:55666/Account/Login?ReturnUrl=%2FAccount%2FLoginWith2FA%3FRemMe%3DWaseNet.Models.AccountViewModels.LoginViewModel%26ReturnUrl%3DHome%252FIndex
Se mi sapete dare qualche dritta ve ne sarei grato...