Asp.net mvc 在每次操作之前验证用户数据
我有一个用户模型,要求用户每三个月更改一次密码。我需要以某种方式检查用户是否已登录(我们允许在网站的某些部分使用匿名浏览器),如果他们的密码已过期,则在他们执行任何其他操作之前,强制他们输入新密码 使用蛮力的方法是在每个操作中添加一点代码(除了帐户中的ChangePassword操作)。例如:Asp.net mvc 在每次操作之前验证用户数据,asp.net-mvc,Asp.net Mvc,我有一个用户模型,要求用户每三个月更改一次密码。我需要以某种方式检查用户是否已登录(我们允许在网站的某些部分使用匿名浏览器),如果他们的密码已过期,则在他们执行任何其他操作之前,强制他们输入新密码 使用蛮力的方法是在每个操作中添加一点代码(除了帐户中的ChangePassword操作)。例如: var authenticatedUser = GetAuthenticatedUser(); if (authenticatedUser != null && authenticated
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是否始终被调用?是的,它将始终被调用。你们知道为什么在直接页面点击时不会调用它吗?