2013-02-15 65 views
0

我正在使用内置的Membership进行FormsAuthentication登录。我想允许管理员禁用其他用户帐户,我想用户的IsApproved属性更改为false,但它不起作用,仍然显示用户登录。我认为这是因为持久性cookie I此前已为用户设置了SetAuthCookieASP.Net MVC FormsAuthentication - 在使用“记住我”持久性Cookie时禁用用户的能力

我已经调查了FormsAuthenticationTicketSetAuthCookie,我似乎无法找到如何重新验证他们偶尔对存储库,以确保用户仍然存在/活跃。

这是否覆盖了现有的功能?

感谢

回答

1

这真的取决于你的身份验证管道是如何工作的,这里是一个总体思路: 每个请求获取数据从数据库用户:有一个ActionFilter

public User CurrentUser 
     { 
      get 
      { 
       if (_CurrentUser == null && Request.IsAuthenticated) 
       { 
        //your method to get the user 
        _CurrentUser = _UserRepository.GetUserByEmail(HttpContext.User.Identity.Name); 
       } 
       return _CurrentUser; 
      } 
     } 

然后你可以检查:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      //user enabled? 
      if (CurrentUser != null && !CurrentUser.IsApproved) 
      { 
       //Force LogOut 
       //Redirect to LogOut 
       filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary {{ "Controller", "Account" }, 
             { "Action", "LogOff" } }); 
      } 
} 
+0

我希望有办法配置现有的认证系统来定期检查登录cooki的有效性E /票。如果这样的功能不存在,我希望找到一个很好的建议,在哪里存储最后的“有效性检查”日期(我不能相信这个cookie,最后的登录日期不能在'HttpContext .User'对象 – Madd0g 2013-02-15 03:07:06

+0

我通常使用自定义成员资格实现,以便我倾向于这样做,但也许你可以挂钩到像'HttpApplication.AuthenticateRequest'事件,在你的global.asax检查这个http://stackoverflow.com/问题/ 1947413/ASP净MVC -1-使用持久cookie的截距加载-的用户数据到包括?RQ = 1 – JOBG 2013-02-15 03:18:01