asp.net-mvc – 谁设置HttpContext.User.Identity的IsAuthenticated属性

这段代码来自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属性

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....