使用代理,Cookie未使用withCredentials设置为true

时间:2018-05-09 09:09:51

标签: ajax angular cookies proxy cors

我是localhost上的host angular 4 app,因为我需要向我在web上托管的后端发出api请求(比如https://example.com)我正在使用代理。这是我的代理配置文件。

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

这样我发出的每个请求都会通过目标网址。当我第一次请求登录包含凭据的页面时,我会收到响应中的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。有谁可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

为什么你在角应用程序中使用jQuery,为什么用它来执行ajax请求,如果angular提供http client

您最好使用它,然后使用interceptors为请求添加标头。

使用Angular时,请使用Angular方式。并使用其工具/库/模式。