我正在使用内置的Membership
进行FormsAuthentication登录。我想让管理员禁用其他用户帐户,我曾想过将用户的IsApproved
属性更改为false,但它不起作用,仍然显示用户已登录。我认为这是因为我之前使用SetAuthCookie
为用户设置的持久性Cookie。
我查看了FormsAuthenticationTicket
和SetAuthCookie
,我似乎无法找到如何偶尔对存储库重新验证它们以确保用户仍然存在/处于活动状态。
这是否包含现有功能?
由于
答案 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" } });
}
}