0

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

我已经研究过FormsAuthenticationTicketSetAuthCookie我似乎无法找到如何偶尔针对存储库重新验证它们以确保用户仍然存在/处于活动状态。

这是否包含在现有功能中?

谢谢

4

1 回答 1

1

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

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" } });
            }
}
于 2013-02-15T03:03:16.230 回答