gpt4 book ai didi

.net - SimpleMembership 会取消用户身份验证?

转载 作者:行者123 更新时间:2023-12-01 02:28:12 25 4
gpt4 key购买 nike

我正在制作一个新的 MVC 4 网站并且我已经设置了 SimpleMembership。我还创建了一个继承自 RolePrincipal 的 CustomPrincipal,并有一个名为 UserInfo 的附加属性,其中包含有关用户的附加信息,例如 LastName、FirstName 和 IsActive。这一切都通过 FormsAuthenticationTicket userData 属性存储在 cookie 中。

我的问题如下。假设我有一个管理页面,管理员用户可以在其中禁用其他用户的帐户 - 将 IsActive 属性设置为 false。假设同时被禁用的用户实际上当前已登录。如果他的访问权限被拒绝,我不希望该用户能够继续浏览该站点。

我怎样才能杀死他的 session 意味着破坏他的 FormsAuthentication cookie?这是正确的做法还是我遗漏了 SimpleMembership 中的其他内容?完成这项任务的正确途径是什么?任何建议将不胜感激...

最佳答案

我建议结合使用 Application_AuthenticateRequest 和 ASP.NET 缓存,如下所示:

1) 当一个用户被删除时,将用户 ID 写入 ASP.NET Cache 中,它可以在那里停留一段有限的时间(可能是一天):

string cacheKey = "RecentlyDeletedUserId" + userId;
Cache.Add(
cacheKey,
true,
null,
DateTime.Now.AddDays(1),
null,
CacheItemPriority.Normal,
null
);

2) 在 global.asax 中,您可以添加 Application_AuthenticateRequest处理程序,在服务器成功接收到表单例份验证票后为每个请求触发。在此处理程序中,您发出一个廉价的内存缓存请求,以查看该用户是否在最近删除的用户列表中。如果是,您将它们注销并将它们重定向到登录页面。
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
string cacheKey = "RecentlyDeletedUserId" + userId;
if (Cache[cacheKey] != null)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
}

如果由于某种原因你不喜欢重定向方法,你可以采取这样的方法:
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
string cacheKey = "RecentlyDeletedUserId" + userId;
if (Cache[cacheKey] != null)
{
IPrincipal anonymousPrincipal = new GenericPrincipal(new GenericIdentity(String.Empty), null);
Thread.CurrentPrincipal = anonymousPrincipal;
HttpContext.Current.User = anonymousPrincipal;
}
}

这只是将用户替换为匿名用户,从而确保用户将无法在您的站点上执行任何操作。 (这种替代方法来自 Invalidating ASP.NET FormsAuthentication server side 。)

关于.net - SimpleMembership 会取消用户身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com