.net – SimpleMembership取消用户身份验证?
我正在创建一个新的MVC 4网站,我已经设置了SimpleMembership.我还创建了一个CustomPrincipal,它继承自RolePrincipal并且有一个名为UserInfo的附加属性,其中包含有关用户的其他信息,如LastName,FirstName和IsActive.这些都通过FormsAuthenticationTicket userData属性存储在cookie中.
我的问题如下.假设我有一个管理页面,管理员用户可以禁用其他用户的帐户 – 将IsActive属性设置为false.假设同时正在被禁用的用户实际上当前已登录.如果他被拒绝访问权限,我不希望该用户能够继续浏览该站点. 如何杀死他的会话意味着销毁他的FormsAuthentication cookie?这是正确的事情,还是SimpleMembership中还有其他东西我不知道?实现这项任务的正确途径是什么?任何建议将不胜感激… 解决方法
我建议结合使用Application_AuthenticateRequest和ASP.NET Cache,如下所示:
1)当用户被删除时,将用户ID写入ASP.NET Cache,它可以在一段有限的时间内(可能是一天): string cacheKey = "RecentlyDeletedUserId" + userId; Cache.Add( cacheKey,true,null,DateTime.Now.AddDays(1),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开始.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC Beta支持列表中的Model Binder
- asp.net-mvc-3 – 重定向(relativeUrl)重定向到IIS中的错误
- 什么是在ASP.NET网站中嵌入视频的有效选项?
- asp.net-mvc – ASP.NET MVC RenderAction重新呈现整个页面
- asp.net-mvc – 如何使用jquery处理JSON?
- asp.net – 获取Gridview的Selected行
- ASP.NET MVC5 OWIN Facebook身份验证突然无法正常工作
- ASP.NET 验证控件与防止按钮连按两次送出
- ASP.NET – meta:ResourceKey vs <%$Resources:MyKey%&
- asp.net-identity – UserManager RemoveFromRole错误
- 如何将数组从Asp.net服务器端传递到客户端的Java
- asp.net – 使用实体框架选择所有行
- asp.net-mvc – 使用邮政MVC与布局解析标题作为邮
- 使用VSCode如何调试C#控制台程序_2_加深总结
- asp.net – 如何LoadControl一个使用VaryByContr
- asp.net-mvc – 在数据实体框架中显示名称
- asp.net – 从1.7到1.9的迷你探查器升级破坏了现
- asp.net-mvc – Visual Studio 2013格式文档在MV
- asp.net-mvc – 实体框架数据库 – 第一个unique
- asp.net-mvc – 已定义以下部分但尚未为布局页面