在我的应用程序中,我使用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);
}
在我的客户全局过滤器中,我检查用户是否存在,如果不存在,我将其签名。但是,它不起作用。通过工作,我的意思是他们通过身份验证并获得对应用程序的访问权。
提前致谢。
答案 0 :(得分:9)
以下是强制用户退出的内容:
public void UserPasswordChangedHandler()
{
FormsAuthentication.SignOut();
Roles.DeleteCookie();
Session.Clear();
}
我不认为需要逐行解释,其自我解释就足够了。 如果我弄错了,请告诉我。
<强>更新强>
对您的其他问题的直接回答是,如果管理员更新了他的数据,则保持每个用户的布尔跟踪,如果是 - 只需将他重定向到登录页面。
请参阅以下有关使用表单身份验证信息强制注销的文章:
更新2
清除Cookie
希望这对你有所帮助。
答案 1 :(得分:2)
当用户需要变为无效时,您必须将其详细信息添加到某种内部静态列表中。
然后在每个页面请求(可能使用Application_BeginRequest)上查看当前用户是否在该列表中,如果是,则在那里调用FormsAuthentication.SignOut。
这似乎有点像黑客,但这是我现在能想到的最好的。
请注意,删除用户在缺席的会话状态完全是另一个问题。