这段代码来自asp.net mvc RTM源代码
谁设置HttpContext.User.Identity的IsAuthenticated属性?
protected virtual bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null) { throw new ArgumentNullException("httpContext"); } IPrincipal user = httpContext.User; if (!user.Identity.IsAuthenticated) { return false; } }
通过调用方法(asp.net mvc 4.0示例项目)设置IsAuthenticated属性:
FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
当我调试asp.net mvc 4.0示例项目的LogOn方法的代码之后,以上的FormsAuth …方法调用。执行
User.Identity.IsAuthenticated
仍然返回FALSE。只有当我调试LogOff方法的时候
User.Identity.IsAuthenticated
说真的。那么谁将这个属性设置为TRUE和WHEN?
更新:
这是关于FORMS身份验证!
我现在调试了asp.net mvc示例项目的LogOn方法,并且在LogOn操作返回后,我已经覆盖的AuthorizeCore方法被调用,然后IsAuthenticated属性为TRUE!
TRUE的设置是否取决于ModelState.Value.Error集合?
如果错误集合中的count == 0,则IsAuthenticated为TRUE
否则IsAuthenticated是FALSE
你可以确认吗
解决方法
该属性由表单认证模块通过从请求中读取和解析表单认证cookie来设置。我已经提出了大胆的请求,因为我怀疑这是你遵循这种行为的原因。让我解释。成功验证后,当您调用FormsAuthentication.SetAuthCookie时,您将认证cookie添加到响应中。此cookie将存储在客户端浏览器上,并将在后续请求中发送。因此,只有在随后的请求中,用户才被认为是认证的。所以你需要总是重新调用SetAuthCookie方法。在调用此方法的请求中,您已经知道用户是否提供正确的凭据,因此您不需要检查IsAuthenticated属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。