13

在我的应用程序中,我使用 Forms-Authentication 来登录和注销用户。

一项功能是管理员可以更改其他用户的用户名。在这种情况下,我需要注销用户名已更改的用户。

如果我不这样做,由于他们之前设置的 cookie,他们可以访问应用程序并收到错误消息(因为他们的用户名不存在,并且有些部分我使用他们的用户名来实现某些功能)。

如何强制这些用户使用 Forms-Authentication 注销?

更新 :

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string controller = filterContext.RouteData.Values["controller"].ToString();
        string action     = filterContext.RouteData.Values["action"].ToString(); ;
        // Below returns the previous username, which does not exist anymore in db.
        string userName = HttpContext.Current.User.Identity.Name;

        UnitOfWork unitOfWork = new UnitOfWork();

        if (!unitOfWork.UserRepository.UserExists(userName))
        {
            FormsAuthentication.SignOut();
            filterContext.HttpContext.Session.Clear();
            filterContext.HttpContext.Session.Abandon();
            // I am not using Roles.


        }
        unitOfWork.Dispose();
        base.OnActionExecuting(filterContext);

    }

在我的客户全局过滤器中,我检查用户是否存在,如果不存在,我将其注销。但是,它不起作用。通过工作,我的意思是他们通过了身份验证并获得了对应用程序的访问权限。

提前致谢。

4

2 回答 2

9

以下是强制用户退出的操作:

public void UserPasswordChangedHandler()
{
  FormsAuthentication.SignOut();
  Roles.DeleteCookie();
  Session.Clear();
}

我认为不需要逐行解释,它的自我解释就足够了。如果我弄错了,请告诉我。

更新

对您的附加问题的直接回答是保持每个用户的布尔跟踪,如果他的数据由管理员更新,如果是,只需将他重定向到登录页面。

有关使用表单身份验证信息强制注销的信息,请参阅以下文章:

更新 2

清除 cookie

希望这对您有所帮助。

于 2012-09-12T00:44:56.823 回答
2

当用户需要失效时,您必须将他们的详细信息添加到某种内部静态列表中。

然后在每个页面请求(可能使用 Application_BeginRequest)上查看当前用户是否在该列表中,如果是,则在此调用 FormsAuthentication.SignOut。

这似乎有点像黑客,但这是我现在能想到的最好的。

请注意,删除缺席用户的会话状态完全是另一个问题。

于 2012-09-11T23:35:04.523 回答