Frage

Ich brauche Benutzer auf die Seite Kennwort ändern umgeleitet werden, wenn ihr Kennwort abgelaufen ist.

Ich möchte diesen Code an einem Ort platzieren, so dass jeder Antrag kann auf die Seite Kennwort ändern umgeleitet werden.

Ich sah schon in der AuthorizeAttribute erstreckt, und übergeordneten OnActionExecuting, aber weder Arbeit / Gestatten Sie mich kurzzuschließen die Routing-Logik, um das Passwort ändert Seite umgeleitet werden.

Für eine kleine Klarstellung, die Logik wäre:

Nicht autorisierte Anfrage:
-> eine beliebige URL -> AuthorizeAttribute -> Login.aspx -> Passwort abgelaufen -> ChangePassword.aspx

Offizielle Anfrage:
-> eine beliebige URL -> ??????? -> ChangePassword.aspx

Sein das ???? Teil, den ich bin nicht sicher, was zu tun ist.


Ich denke, ich werde mit Verlängerung der AuthorizeAttribute gehen. Ich werde verwenden, die überall außer das Passwort ändern Controller-Methoden.

War es hilfreich?

Lösung

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

das funktioniert gut, markieren Sie einfach jeden Controller mit diesem Attribut ausschließen „Konto“ ein. Auf diese Weise kein Benutzer mit abgelaufenen Attribut der Lage, bis Passwort ändern, um fortzufahren.

Andere Tipps

Sie aussehen könnte, einen Event-Handler für das Ereignis PostAuthenticateRequest in global.asax auf Hinzufügen.

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");
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top