Sto provando a reindirizzare l'utente a un'azione diversa se il loro indirizzo email non è stato convalidato. Il fatto è che non voglio che vengano disconnessi, voglio solo reindirizzarli. Quando eseguo questa operazione in OnAuthorization per il controller, reindirizza come previsto, ma l'utente non è autenticato. Non sono sicuro del perché questo sia. Il mio codice è simile al seguente:Il reindirizzamento MVC in OnAutorizzazione causa l'esito negativo dell'autorizzazione
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
//_applicationService.CurrentUser is populated correctly at this point
// from Controller.User
if (_applicationService.CurrentUser != null)
{
if (_applicationService.CurrentUser.EmailVerified != true)
{
var url = new UrlHelper(filterContext.RequestContext);
var verifyEmailUrl = url.Action("EmailVerificationRequired", "Account", null);
filterContext.Result = new RedirectResult(verifyEmailUrl);
}
}
}
Nota: ho rimosso il codice non necessario per renderlo più chiaro. _applicationService.CurrentUser viene popolato con l'utente corrente e l'utente è stato autenticato correttamente quando arriva a quel punto. Ma dopo il reindirizzamento l'utente non è più autenticato.
Come posso ottenere questo reindirizzamento senza influire sull'autorizzazione utente integrata?
Ho provato a inserire il mio codice in OnActionExecuting, e ho anche provato a implementarlo in un ActionFilterAttribute personalizzato, ma ovunque inserissi questo reindirizzamento impedisce l''Utente' (es: System.Security.Principal .IPrincipal Controller.User) dall'ottenere l'autenticazione.
Cosa mi manca qui? Spero che questo abbia un senso. Qualsiasi aiuto molto apprezzato.
In risposta alla richiesta di Darin per la mia azione login:
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
string errorMessage = "The username or password is incorrect";
if (ModelState.IsValid)
{
if (_contextExecutor.ExecuteContextForModel<LoginContextModel, bool>(new LoginContextModel(){
LoginViewModel = model
}))
{
ViewBag.CurrentUser = _applicationService.CurrentUser;
_formsAuthenticationService.SetAuthCookie(model.LoginEmailAddress, model.RememberMe);
if (_applicationService.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home").Success("Thank you for logging in.");
}
else
{
errorMessage = "Email address not found or invalid password.";
}
}
return View(model).Error(errorMessage);
}
Puoi mostrare come stai autenticando l'utente: l'azione 'LogOn'? –
@DarinDimitrov - Ho aggiunto la mia azione di login come richiesto. – soupy1976
Questo è proprio quello che stavo cercando! Risparmiato un sacco di tempo – JosephDoggie