Asp.net mvc 谁设置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"); }

此代码来自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;
        }
    }
是否通过调用方法设置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;}}