Где я должен разместить чек, который может перенаправить запрос? - PullRequest
6 голосов
/ 08 мая 2009

Мне нужно перенаправить пользователей на страницу смены пароля, если срок действия их пароля истек.

Я хочу разместить этот код в одном месте, чтобы любой запрос мог быть перенаправлен на страницу смены пароля.

Я изучил расширение AuthorizeAttribute и переопределение OnActionExecuting, но ни одна из них не работает / не позволяет мне замкнуть логику маршрутизации для перенаправления на страницу смены пароля.

Для небольшого пояснения логика будет:

Несанкционированный запрос:
-> любой URL -> AuthorizeAttribute -> Login.aspx -> срок действия пароля истек -> ChangePassword.aspx

Авторизованный запрос:
-> любой URL -> ??????? -> ChangePassword.aspx

Это что ???? часть, что я не уверен, что делать.


Я думаю, что я собираюсь пойти с расширением AuthorizeAttribute. Я буду использовать это везде , за исключением методов контроллера смены пароля.

Ответы [ 2 ]

6 голосов
/ 04 июля 2009
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);
    }
}

это работает нормально, просто пометьте каждый контроллер этим атрибутом, исключая "Account". Таким образом, ни один пользователь с атрибутом expired не сможет продолжить работу до смены пароля.

1 голос
/ 08 мая 2009

Вы можете посмотреть, как добавить обработчик события PostAuthenticateRequest в 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");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...