Question

Je dois rediriger les utilisateurs vers la page Modifier le mot de passe si leur mot de passe a expiré.

Je souhaite placer ce code à un endroit unique afin que toute demande puisse être redirigée vers la page de modification du mot de passe.

J'ai envisagé d'étendre AuthorizeAttribute et de remplacer OnActionExecuting, mais cela ne me permet ni de me permettre de court-circuiter la logique de routage afin de le rediriger vers la page de modification du mot de passe.

Pour une petite précision, la logique serait la suivante:

Demande non autorisée:
- > n'importe quelle URL - > AuthorizeAttribute - > Login.aspx - > mot de passe expiré - > ChangePassword.aspx

Demande autorisée:
- > n'importe quelle URL - > ??????? - > ChangePassword.aspx

C'est ça ???? partie que je ne sais pas quoi faire.

Je pense que je vais aller avec l'extension de AuthorizeAttribute. J'utiliserai cela partout sauf les méthodes du contrôleur de changement de mot de passe.

Était-ce utile?

La solution

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);
    }
}

cela fonctionne bien, il suffit de marquer chaque contrôleur avec cet attribut exclure "Compte". un. De cette façon, aucun utilisateur avec un attribut arrivé à expiration ne peut continuer jusqu'à ce que le mot de passe soit changé.

Autres conseils

Vous pouvez envisager d'ajouter un gestionnaire d'événement pour l'événement PostAuthenticateRequest dans 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");
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top