Проверяйте данные пользователя перед каждым действием - PullRequest
1 голос
/ 27 августа 2009

У меня есть модель пользователя, которая требует, чтобы пользователь менял свой пароль каждые три месяца. Мне нужно как-то проверить, вошел ли пользователь в систему (мы разрешаем анонимные браузеры в определенных разделах сайта), и, если срок действия его пароля истек, вынудите его ввести новый, прежде чем он сможет что-либо сделать.

Грубым способом сделать это было бы добавить немного кода к каждому действию (кроме действия ChangePassword в Account). Например:

var authenticatedUser = GetAuthenticatedUser();
if (authenticatedUser != null && authenticatedUser.IsPasswordExpired)
    return RedirectToAction("Account", "ChangePassword");

Очевидно, это ужасный способ решить эту проблему, но я не уверен, что это правильный способ. Есть идеи? Я уверен, что в будущем нам нужно будет добавить больше проверок пользовательских данных, поэтому я действительно хотел бы найти хорошее решение для этого сейчас.

Ответы [ 2 ]

4 голосов
/ 27 августа 2009

Я делаю пользовательскую аутентификацию в своем базовом классе контроллеров (все мои контроллеры происходят из этого). Вы можете переопределить защищенный метод Controller.OnAuthorization. Обратите внимание, что OnAuthorization вызывается после метода Controller.Initialize, поэтому, если вы добавляете другую пользовательскую логику в метод Initialize, просто помните, что это вызывается первым.

    /// <summary>
    /// Called when authorization occurs.
    /// </summary>
    /// <param name="filterContext">Contains information about the current request and action.</param>
    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        // Do custom authentication here.
        Authenticate();

        base.OnAuthorization(filterContext);
    }
0 голосов
/ 27 августа 2009

Вы можете написать свой собственный HttpModule и проверять его по каждому запросу один раз. Вы можете извлечь из HttpModule и вставить его в раздел конфигурации web.config httpModules.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...