首页 > 解决方案 > 使用代理,使用 withCredentials 设置为 true 的 Angular 4 应用程序中未发送 Cookie

问题描述

我是 localhost 上的主机 angular 4 应用程序,因为我需要向托管在网络上的后端发出 api 请求(比如 https://example.com),所以我正在使用代理。这是我的代理配置文件。

  "*": {"target":"https://example.com",
"secure": false,
"logLevel": "debug",
"changeOrigin": true }

这样我发出的每个请求都会通过目标 url 。当我向包含凭据的登录页面发出第一个请求时,我收到 cookie 作为响应。但是当我向 https://example.com/images发出另一个请求 (POST) 时,我被重定向到登录页面。我可以在我的网络中看到请求标头没有发送 cookie,但是我确实从我的第一个登录请求中收到了它们。我检查了这个问题的许多解决方案。他们中的许多人要求在我的 ajax 请求中包含 {withCredentials=true},我在每个请求中都这样做了。这是我的请求

 $.ajax({
            url: "https://example.com/images",
            type: "POST",
            crossDomain:true,
            headers: {
               // includes necessary headers .
              },
            xhrFields: {
                withCredentials: true
            },

            data:data1 ,
            //data1 is json formatted


            success: function (res) {
                console.log(res)
            },
            error: function (xhr, status) {
                console.log(status);
            }
        });

但这并没有解决问题。我怀疑 cookie 由于代理而丢失,或者浏览器没有正确处理它们。我检查了我是否允许第三方 cookie。我需要用第二个请求发送这些会话 cookie。我尝试手动添加它们,但我没有找到一种方法来获取它们并将它们与此请求一起发送。我该如何解决这个问题?如果我删除代理,那么我会遇到 CORS 问题。我无权访问后端服务器。因此我尝试使用代理处理 CORS,该代理对登录请求正常工作。但是第二个请求没有与 cookie 一起发送。任何人都可以帮助解决这个问题?

标签: ajaxangularcookiesproxycors

解决方案


如果 Angular 提供了http 客户端,为什么要在 Angular 应用程序中使用 jQuery,以及为什么要使用它来执行 ajax 请求?

您最好使用它,然后使用拦截器将标头添加到请求中。

使用 Angular 时,请以 Angular 的方式进行。并使用它的工具/库/模式。


推荐阅读