Asp.net mvc 在每次操作之前验证用户数据

Asp.net mvc 在每次操作之前验证用户数据,asp.net-mvc,Asp.net Mvc,我有一个用户模型,要求用户每三个月更改一次密码。我需要以某种方式检查用户是否已登录(我们允许在网站的某些部分使用匿名浏览器),如果他们的密码已过期,则在他们执行任何其他操作之前,强制他们输入新密码 使用蛮力的方法是在每个操作中添加一点代码(除了帐户中的ChangePassword操作)。例如: var authenticatedUser = GetAuthenticatedUser(); if (authenticatedUser != null && authenticated

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

使用蛮力的方法是在每个操作中添加一点代码(除了帐户中的ChangePassword操作)。例如:

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

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

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

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

我在基本控制器类中进行自定义身份验证(我的所有控制器都从该类派生)。您可以重写受保护的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);
    }
//
///发生授权时调用。
/// 
///包含有关当前请求和操作的信息。
授权时受保护的覆盖无效(AuthorizationContext filterContext)
{
//在这里进行自定义身份验证。
验证();
基于授权(filterContext);
}

我在我的基本控制器类中进行自定义身份验证(我的所有控制器都源于此)。您可以重写受保护的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);
    }
//
///发生授权时调用。
/// 
///包含有关当前请求和操作的信息。
授权时受保护的覆盖无效(AuthorizationContext filterContext)
{
//在这里进行自定义身份验证。
验证();
基于授权(filterContext);
}

这看起来是个不错的解决方案。不幸的是,我将离开我的电脑几天,无法尝试它。一个简单的问题-即使操作没有使用授权属性,OnAuthorize是否始终被调用?是的,它将始终被调用。你们知道为什么在直接页面点击时不会调用它吗?这看起来是一个很好的解决方案。不幸的是,我将离开我的电脑几天,无法尝试它。一个简单的问题-即使操作没有使用Authorize属性,OnAuthorize是否始终被调用?是的,它将始终被调用。你们知道为什么在直接页面点击时不会调用它吗?