我有一个用户模型,要求用户每三个月更改一次密码。我需要以某种方式检查用户是否已登录(我们允许在网站的某些部分使用匿名浏览器),如果他们的密码已过期,请强制他们在他们可以执行任何其他操作之前输入新的。
这样做的蛮力方法是为每个动作添加一些代码(Account中的ChangePassword动作除外)。例如:
var authenticatedUser = GetAuthenticatedUser();
if (authenticatedUser != null && authenticatedUser.IsPasswordExpired)
return RedirectToAction("Account", "ChangePassword");
显然,这是解决这个问题的一种可怕方式,但我不确定这样做的正确方法是什么。有任何想法吗?我很确定将来我们将不得不添加更多这样的用户数据检查,所以我真的很想找到一个很好的解决方案。
答案 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配置部分。