Dove devo inserire un assegno che potrebbe reindirizzare una richiesta?
-
10-07-2019 - |
Domanda
Devo reindirizzare gli utenti alla pagina Cambia password se la loro password è scaduta.
Voglio inserire questo codice in un unico posto in modo che qualsiasi richiesta possa essere reindirizzata alla pagina di modifica della password.
Ho cercato di estendere AuthorizeAttribute e di sovrascrivere OnActionExecuting, ma nessuno dei due mi ha permesso di cortocircuitare la logica di routing per reindirizzare alla pagina di modifica della password.
Per un piccolo chiarimento, la logica sarebbe:
Richiesta non autorizzata:
- > qualsiasi URL - > AutorizeAttribute - > Login.aspx - > password scaduta - > ChangePassword.aspx
Richiesta autorizzata:
- > qualsiasi URL - > ??????? - > ChangePassword.aspx
È quello ???? parte che non sono sicuro di cosa fare.
Penso che andrò con l'estensione di AuthorizeAttribute. Lo userò ovunque except i metodi del controller di modifica della password.
Soluzione
public class DenyExpiredPasswordAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
IPrincipal user = filterContext.HttpContext.User;
if(user != null)
{
if (user.Identity.IsAuthenticated)
{
if (CurrentUser.PasswordExpired) // your checking of password expiration
{
filterContext.HttpContext.Response.Redirect("~/Account/ChangePassword?reason=expired");
}
}
}
base.OnAuthorization(filterContext);
}
}
funziona bene, basta contrassegnare ogni controller con questo attributo escludi " Account " uno. In questo modo nessun utente con attributo scaduto è in grado di continuare fino alla modifica della password.
Altri suggerimenti
Potresti cercare di aggiungere un gestore di eventi per l'evento PostAuthenticateRequest in global.asax.
protected void Application_Start(object sender, EventArgs e) {
this.PostAuthenticateRequest += new EventHandler(Global_PostAuthenticateRequest);
}
void Global_PostAuthenticateRequest(object sender, EventArgs e)
{
if (passwordExpired) {
Context.Response.Redirect("~/ChangePassword.aspx");
}
}