[axios]axios 可以设置 cookies 吗?

2024-08-22 719 views
6

我正在尝试设置一个带有响应标头的 cookie,如下所示:

Set-Cookie:connect.sid=s%3AvidaO7FJ_U-Fx77zGEAozIizc4eddq8P.wkkigPnMdYNo8SttRYplaI1%2FGL56vUVDgUK3UzoI6DI; Domain=subdomain.ofmywebsite.com; Path=/; Expires=Sun, 04 Mar 2018 15:14:18 GMT

客户端代码:

axios.defaults.withCredentials = true;

axios('domain.ofmyserver.com/api/login', {
      method: 'post',
      data:{
        email: this.state.email,
        password: this.state.password
      },

    })

但没有给出错误,也没有设置 cookie。我这里漏掉了什么?当我直接使用浏览器访问服务器域时,它会设置一个 cookie。但是对于 axios 中的 POST 请求,它只是拒绝了它,没有任何错误。

语境
  • axios 版本:0.17.1
  • 环境:Chrome、Safari、Firefox
  • 带有 express-session 1.15.6 的 express 服务器

回答

4

也许你在服务器端设置cookie时需要设置cookie路径~~

4

你好,@sebastiaandegeus,你找到解决方案了吗?:)

6

你好,我也有类似的需求。我的 node jsreq.cookies 对象中有 cookie。现在,我从我的 node js 应用程序调用另一个 API(在 spring security 项目中),它给出了错误:

无法验证提供的 CSRF 令牌,因为未找到您的会话。

我尝试通过从 cookies 中读取 X-XSRF-TOKEN 来传递标头中的 X-XSRF-TOKEN。但似乎还必须传递会话,

那么如何将 req.cookies 从服务器端传递到另一个 API?

2

谁知道这个答案,也有这个错误..

3

如果有人仍然遇到此问题并阅读了此内容:请仔细检查您是否从服务器设置了domainpath。我看到此线程的创建者这样做了,但我没有,并且对它为什么不起作用感到很疯狂。使用fetch而不是axios,它可以在没有设置这些属性的情况下工作,但axios显然需要它们。

5

其实axios本身不设置cookie,而是由浏览器来完成的。

我看到回复中Set-Cookie有“Domain=subdomain.ofmywebsite.com; Path=/;”,这意味着不能用于“domain.ofmyserver.com/api/login”。如果我误解了什么,请纠正我或打开一个新问题。

2

对此有很多麻烦。 Domain并按Path@ninaolo 所说的进行设置:

sessionid=redacted_token; Domain=127.0.0.1; expires=Fri, 10 Apr 2020 07:07:41 GMT; HttpOnly; Max-Age=900; Path=/

和标头也已设置(这可能会导致 CORS 问题)。我也尝试在服务器上禁用 CORS,但存在同样的问题Access-Control-Allow-OriginAccess-Control-Allow-Credentials

设置withCredentials也已设定:

axios.defaults.withCredentials = true;

我也尝试过传递withCredentials给请求本身(以防默认设置不起作用):

const response = await axios.post(
  `${API_URL}${LOGIN_URI}`,
  {
    email,
    password
  },
  { withCredentials: true }
);

但这似乎仍然没有设置 cookie,我不知道为什么。完全相同的端点在 Postman 中工作(它从标头设置 cookie Set-Cookie),但在浏览器中它不起作用。

我也尝试了同样的方法,fetch()它在 Chrome 中有效,它会显示在 devtools 存储部分中。只是当我刷新页面时,cookie 消失了。而在 Firefox 中它根本不起作用。

因此,这个问题似乎并非 axios 所特有(我最初以为是)。有人知道可能出了什么问题吗?

3

可以赞同@dspacejs 提出的问题,当我使用 fetch 时它成功设置了 cookie,但是当使用 axios 时它没有设置 cookie。