Asp.net mvc 谁设置HttpContext.User.Identity的IsAuthenticated属性
此代码来自asp.net mvc RTM源代码 谁设置HttpContext.User.Identity的IsAuthenticated属性Asp.net mvc 谁设置HttpContext.User.Identity的IsAuthenticated属性,asp.net-mvc,authentication,forms-authentication,Asp.net Mvc,Authentication,Forms Authentication,此代码来自asp.net mvc RTM源代码 谁设置HttpContext.User.Identity的IsAuthenticated属性 protected virtual bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null) { throw new ArgumentNullException("httpContext"); }
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
}
是否通过调用方法设置IsAuthenticated属性(asp.net mvc 4.0示例项目):
当我调试asp.net mvc 4.0示例项目的登录方法的代码时,在上面的表单之后。。。方法调用。执行
User.Identity.IsAuthenticated
仍然返回FALSE。只有在调试注销方法时
User.Identity.IsAuthenticated
这是真的。那么,谁在何时将此属性设置为TRUE
更新:
这是关于表单的身份验证
我现在调试了asp.net mvc示例项目的登录方法,在返回登录操作后,调用了我覆盖的AuthorizeCore方法,然后IsAuthenticated属性为TRUE
TRUE的设置是否取决于ModelState.Value.Error集合的类型
如果错误集合中的计数=0,则IsAuthenticated为TRUE
否则,未经验证的数据是错误的
您能确认吗?属性的来源取决于
标识的类型。对于FormsIdentity
,该属性仅返回true:
/// <devdoc>
/// Indicates whether or not authentication took
/// place.
/// </devdoc>
public bool IsAuthenticated { get { return true;}}
//
///指示是否进行了身份验证
///地点。
///
公共布尔值已验证{get{return true;}}
这是有意义的,因为FormsAuthenticationModule.cs
中的代码仅在身份验证后分配FormsIdentity
。代码似乎相当复杂,我看到它从cookie中提取了一个票证,但我找不到它在哪里验证票证。此属性由表单身份验证模块通过从请求中读取和解析表单身份验证cookie来设置。我用粗体写下请求,因为我怀疑这就是你观察这种行为的原因。让我解释一下。当您调用FormsAuthentication.SetAuthCookie时,验证成功后,您正在将验证cookie添加到响应中。此cookie将存储在客户端浏览器上,并将在后续请求时发送。因此,只有在后续请求中,用户才会被认为是经过身份验证的。因此,您需要在调用SetAuthCookie方法后始终重定向。在调用此方法的请求中,您已经知道用户是否提供了正确的凭据,因此您不需要检查IsAuthenticated属性。抱歉,Andomar我没有写关于表单身份验证的所有内容。我编辑了我的问题。到目前为止我在谷歌上读到的内容,经过一些测试后,FormsAuthentication.SetAuthCookie需要设置为IsAuthenticated返回true。var isAuthenticated=base.AuthorizeCore(httpContext);在我的重写核心方法中。实际上,它应该被称为AuthenticateCore,但那是另一回事。如果任何人有微软的链接/证明,无论是什么原因使IsAuthenticated jump switch成为真的,我都会很高兴并将其标记为解决方案!没有源代码链接,但判断您的其他asp.net mvc解决方案,我发现您是专家;-)我喜欢上面的解释,以及许多人不理解/发现谷歌在同一主题中寻求帮助的后续请求。@DarinDimitrov如果响应被写入正确的cookie,其中包括成功验证后的FormAuthentication票证。asp.net将从请求中读取并解析它。它将确定是否已验证
true或false。有什么问题请纠正我。谢谢
/// <devdoc>
/// Indicates whether or not authentication took
/// place.
/// </devdoc>
public bool IsAuthenticated { get { return true;}}