【问题标题】:Difficulty sending cookies with fetch requests in JavaScript难以在 JavaScript 中使用 fetch 请求发送 cookie
【发布时间】:2015-06-22 03:10:17
【问题描述】:

我有两个独立的服务,一个React 单页应用程序和一个express API,我正在尝试使用新的fetch 功能从SPA 通信到API。由于这两个服务位于不同的域中,我在 express 应用程序中使用了一个 CORS 中间件,以便从 SPA 向 API 发出请求。我正在尝试让任何 fetch 请求也包含 cookie,这样我就可以在我的 express 应用程序中验证 cookie,例如

在客户端:

fetch('http://localhost:8000/hello', { 
    credentials: 'include', 
    mode: 'cors' 
}).then(/* ... */)

在服务器端:

var app = express();

app.use(cors({ credentials: true });
app.use(cookieParser());

app.get('/hello', function (req, res) {
  // Try and find the cookies sent with the request
  console.log(req.cookies);

  res.status(200).json({ message: 'cookies received!' });
});

但是,无论我尝试什么,我仍然无法访问 request 对象上的任何 cookie,即使我可以通过使用 document.cookies 访问它们。

cookie 示例:

name: token
value: TOKEN_VALUE
domain: localhost
path: /
http: false
secure: false

有人对如何解决这个问题有建议吗?任何帮助将不胜感激!

【问题讨论】:

  • credentials: 'include 之后没有结束引号,这只是一个错字吗?另外,你有 JSFiddle 或 Pnkr 吗?
  • 是的,对不起!只是一个错字。遗憾的是没有,因为它涉及服务器端组件。
  • 你能分享你的客户端代码吗?我可以创建自己的服务器。
  • 有问题的客户端代码反映了我在问题中发布的获取请求。请求正在完成,我能够从我的服务器接收响应,但没有 cookie 被传递到服务器。

标签: javascript cookies express


【解决方案1】:

在撰写本文时,您使用的 fetch polyfill 库不符合规范。对于凭证,它期望 'cors' 是值而不是 'include'。我将在第 264 行编辑我的本地 fetch.js 副本以适应标准,提交拉取请求,并寻找更好的支持 polyfill 库。

查看未解决的问题:https://github.com/github/fetch/issues/109

https://github.com/github/fetch

https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch

【讨论】:

猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2020-01-24
  • 2014-12-18
  • 2019-12-11
相关资源
最近更新 更多