让 Axios 在其请求中自动发送 cookie

新手上路,请多包涵

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

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

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

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

我尝试通过在我的 Express.js 服务器中使用这些属性来访问标头或 cookie:

req.headers
req.cookies

它们都不包含任何cookies。我正在使用 cookie 解析器中间件:

app.use(cookieParser())

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

编辑:

我像这样在客户端上设置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 嵌入到我的所有请求中。

原文由 Kunok 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

您可以使用 withCredentials 属性。

来自不同域的 XMLHttpRequest 无法为其自己的域设置 cookie 值,除非在发出请求之前将 withCredentials 设置为 true。

 axios.get(BASE_URL + '/todos', { withCredentials: true });

还可以对每个 Axios 请求强制凭据

axios.defaults.withCredentials = true

或者使用一些 Axios 请求的凭据作为以下代码

const instance = axios.create({
 withCredentials: true,
 baseURL: BASE_URL
 })
 instance.get('/todos')

原文由 fingerpich 发布,翻译遵循 CC BY-SA 4.0 许可协议

长话短说:

{ withCredentials: true }axios.defaults.withCredentials = true


来自 axios 文档

withCredentials: false, // default

withCredentials 指示是否应使用凭据进行跨站点访问控制请求

如果您通过 { withCredentials: true } 您的请求,它应该可以工作。

更好的方法是将 withCredentials 设置为 trueaxios.defaults

axios.defaults.withCredentials = true

原文由 Fatih Acet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题