Asp.net mvc ASP.Net MVC FormsAuthentication-在使用;“记住我”;持久cookie

Asp.net mvc ASP.Net MVC FormsAuthentication-在使用;“记住我”;持久cookie,asp.net-mvc,asp.net-mvc-3,forms-authentication,Asp.net Mvc,Asp.net Mvc 3,Forms Authentication,我正在使用内置的成员身份登录FormsAuthentication。我想允许管理员禁用其他用户帐户,我曾想过将用户的IsApproved属性更改为false,但它不起作用,仍然显示用户已登录。我想这是因为我之前用SetAuthCookie为用户设置了持久cookie 我查看了FormsAuthenticationTicket和SetAuthCookie,似乎找不到如何偶尔对存储库进行重新验证,以确保用户仍然存在/处于活动状态 现有功能是否涵盖了这一点 谢谢这实际上取决于您的身份验证管道的工作方式

我正在使用内置的
成员身份
登录FormsAuthentication。我想允许管理员禁用其他用户帐户,我曾想过将用户的
IsApproved
属性更改为false,但它不起作用,仍然显示用户已登录。我想这是因为我之前用
SetAuthCookie
为用户设置了持久cookie

我查看了
FormsAuthenticationTicket
SetAuthCookie
,似乎找不到如何偶尔对存储库进行重新验证,以确保用户仍然存在/处于活动状态

现有功能是否涵盖了这一点


谢谢

这实际上取决于您的身份验证管道的工作方式,这里有一个总体思路: 对于每个请求,从数据库获取用户的数据:

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

我希望有办法配置现有的身份验证系统,定期检查登录cookie/ticket的有效性。如果这样的功能不存在,我希望找到一个好的建议,在哪里存储最后的“有效性检查”日期(我不能信任cookie,在
HttpContext.User
对象中无法访问上次登录日期。我通常使用自定义成员身份实现,以便我可以这样做,但也许您可以在您的global.asax中连接到类似
HttpApplication.AuthenticateRequest
事件的内容