每个操作之前验证用户数据

时间:2009-08-26 22:01:17

标签: asp.net-mvc

我有一个用户模型,要求用户每三个月更改一次密码。我需要以某种方式检查用户是否已登录(我们允许在网站的某些部分使用匿名浏览器),如果他们的密码已过期,请强制他们在他们可以执行任何其他操作之前输入新的。

这样做的蛮力方法是为每个动作添加一些代码(Account中的ChangePassword动作除外)。例如:

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

显然,这是解决这个问题的一种可怕方式,但我不确定这样做的正确方法是什么。有任何想法吗?我很确定将来我们将不得不添加更多这样的用户数据检查,所以我真的很想找到一个很好的解决方案。

2 个答案:

答案 0 :(得分:4)

我在我的基本控制器类中进行自定义身份验证(我的所有控制器都来自此)。您可以覆盖受保护的Controller.OnAuthorization方法。请注意,在Controller.Initialize方法之后调用OnAuthorization,因此如果您在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);
    }

答案 1 :(得分:0)

你可以编写自己的HttpModule并在每次请求上验证一次。 您可以从HttpModule派生并将其粘贴在web.config httpModules配置部分。