6

如果用户的密码已过期,我需要将用户重定向到更改密码页面。

我想将此代码放在一个地方,以便可以将任何请求重定向到更改密码页面。

我已经研究过扩展 AuthorizeAttribute 并覆盖 OnActionExecuting,但两者都不起作用/不允许我短路路由逻辑以重定向到密码更改页面。

稍微澄清一下,逻辑是:

未经授权的请求:
-> 任何 URL -> AuthorizeAttribute -> Login.aspx -> 密码过期 -> ChangePassword.aspx

授权请求:
-> 任何 URL -> ????????? -> 更改密码.aspx

就是那个 ????我不知道该怎么做的部分。


我想我将继续扩展 AuthorizeAttribute。除了密码更改控制器方法 外,我将在任何地方使用它。

4

2 回答 2

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

这很好用,只需使用此属性标记每个控制器,排除“帐户”一个。这样,在更改密码之前,没有具有过期属性的用户能够继续。

于 2009-07-04T00:47:33.613 回答
1

您可以查看在 global.asax 中为 PostAuthenticateRequest 事件添加事件处理程序。

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");
   }
}
于 2009-05-07T21:43:50.660 回答