我正在尝试新的Fetch API,但cookie有问题。具体来说,在成功登录后,在未来的请求中有一个Cookie报头,但Fetch似乎忽略了这个报头,并且我所有的请求都是未经授权的。

是因为Fetch还没有准备好,还是Fetch不能与cookie一起工作?

我用Webpack构建我的应用程序。我也在React Native中使用Fetch,它没有同样的问题。


当前回答

默认情况下,Fetch不使用cookie。要启用cookie,请执行以下操作:

fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);

其他回答

只是为。net webapi2用户添加了正确的答案。

如果你使用cors是因为你的客户端站点和你的webapi来自不同的地址,那么你还需要在服务器端配置中包含SupportsCredentials=true。

        // Access-Control-Allow-Origin
        // https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
        var cors = new EnableCorsAttribute(Settings.CORSSites,"*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);

默认情况下,Fetch不使用cookie。要启用cookie,请执行以下操作:

fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);

我的问题是我的cookie被设置在一个特定的URL路径上(例如,/auth),但我抓取到一个不同的路径。我需要将cookie的路径设置为/。

如果它仍然不能为您修复凭证后。

我还用了:

  credentials: "same-origin"

它曾经工作,然后它不再突然,在挖掘了很多之后,我意识到我已经把我的网站url更改为http://192.168.1.100来测试它在局域网,这是用来发送请求的url,即使我是在http://localhost:3000上。

总之,要确保页面的域与获取url的域相匹配。

除了@Khanetor的回答,对于那些处理跨来源请求的人:凭据:“包括”

示例JSON获取请求:

fetch(url, {
  method: 'GET',
  credentials: 'include'
})
  .then((response) => response.json())
  .then((json) => {
    console.log('Gotcha');
  }).catch((err) => {
    console.log(err);
});

https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials