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.

È stato utile?

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");
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top