HttpContext.User设置正确,然后丢失/替换为下一个请求

时间:2015-06-30 08:55:47

标签: c# .net asp.net-mvc-5

我已经实现了自定义AuthCheckAttribute并在我的应用程序中全局使用它。

我已经确认控制流程正确且AllowAnonymousAttribute正在得到正确尊重。

在我的登录操作处理程序中,我按如下方式设置当前User

//This user is an NHibernate entity representing a user of the
//app. AuthUser takes the Identity.Name from here.
HttpContext.User = AuthUser.CreateAuthUser(user);

如果用户名:密码组合有效,则AuthUser.CreateAuthUser()会返回IPrincipalIIdentity会返回true IsAuthenticated

设置完成后,登录操作处理程序会重定向到用户最初要访问的页面,现在在AuthCheckAttribute.OnAuthentication()方法中,context.HttpContext.User设置为System.Security.Principal.WindowsPrincipal的实例(并且IsAuthenticated返回false)而不是我在登录处理程序中设置的AuthUser

我做错了什么?问题似乎是我在登录操作处理程序中设置的User丢失/被执行时间再次到达AuthCheckAttribute.OnAuthentication()所取代。

我有一个课程AuthUser : IPrincipalAuthIdentity : IIdentity。对AuthUser.CreateAuthUser(user)的调用会正确地实例化AuthUserAuthIdentity类,因此没有问题。

配置:MVC5,.Net 4.5

1 个答案:

答案 0 :(得分:1)

没有必要开会。您可以使用加密的用户ID在浏览器中存储仅HTTP的cookie。在您的过滤器中,检查此cookie并使用存储的用户ID重新加载您的用户并在HttpContext中设置它。