代码之家  ›  专栏  ›  技术社区  ›  Jason

在每次操作之前验证用户数据

  •  1
  • Jason  · 技术社区  · 15 年前

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

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

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

    2 回复  |  直到 15 年前
        1
  •  4
  •   jimr    15 年前

    我在我的基本控制器类中进行自定义身份验证(我的所有控制器都由此派生)。您可以重写受保护的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);
        }
    
        2
  •  0
  •   Mischa    15 年前

    您可以编写自己的HttpModule,并在每个请求上验证它一次。