让Axios自动在请求中发送cookies

310

我使用 Axios 从客户端向我的 Express.js 服务器发送请求。

我在客户端上设置了一个 cookie,并且希望在所有的 Axios 请求中读取该 cookie,而无需手动将它们添加到请求中。

这是我的客户端请求示例:

axios.get(`some api url`).then(response => ...

我试图在我的Express.js服务器中使用这些属性来访问头文件或cookie:

req.headers
req.cookies

它们两个都没有包含任何cookie。我正在使用cookie解析器中间件:

app.use(cookieParser())

如何让Axios自动在请求中发送cookies?

编辑:

我在客户端设置cookie的方法如下:

import cookieClient from 'react-cookie'

...
let cookie = cookieClient.load('cookie-name')
if(cookie === undefined){
      axios.get('path/to/my/cookie/api').then(response => {
        if(response.status == 200){
          cookieClient.save('cookie-name', response.data, {path:'/'})
        }
      })
    }
...

虽然它也使用了 Axios,但这与问题无关。我只是想在设置 cookie 后将 cookie 嵌入到所有请求中。


1
你是如何在客户端设置cookie的?请给出代码示例 :) - Tzook Bar Noy
@TzookBarNoy 在问题中添加了代码。 - Kunok
2
Cookie是由服务器使用Set-Cookie设置的,而不是由客户端设置的。我猜你的意思是在客户端读取Cookie。根据Cookie协议,客户端应该在其请求中包含一个Cookie头,以向Cookie发行服务器发送请求。 - Hans Poo
看这个 https://dev59.com/qVQJ5IYBdhLWcg3wbFMW#55804086 - Ender Bonnet
21个回答

-1

使用Express Session将sameSite设置为“lax”对我有效:

app.use(session({
  secret: '$ome$essi@nsecre+',
  saveUninitialized: true,
  resave: false,
  store: new MemoryStore({
    captureRejections: true,
  }),
  cookie: {
    secure: false,
    sameSite: 'lax'
  }, // max age set to 24 hours
}));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接