ASP.Net MVC FormsAuthentication - 在使用“记住我”持久性cookie时禁用用户的能力

时间:2013-02-15 02:40:52

标签: asp.net-mvc asp.net-mvc-3 forms-authentication

我正在使用内置的Membership进行FormsAuthentication登录。我想让管理员禁用其他用户帐户,我曾想过将用户的IsApproved属性更改为false,但它不起作用,仍然显示用户已登录。我认为这是因为我之前使用SetAuthCookie为用户设置的持久性Cookie。

我查看了FormsAuthenticationTicketSetAuthCookie,我似乎无法找到如何偶尔对存储库重新验证它们以确保用户仍然存在/处于活动状态。

这是否包含现有功能?

由于

1 个答案:

答案 0 :(得分:1)

这实际上取决于您的身份验证管道的工作方式,这是一个大致的想法: 每个请求从DB获取用户的数据:

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

然后使用ActionFilter,您可以检查:

 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" } });
            }
}