未使用提取功能发送NodeJS HTTPOnly cookie

时间:2018-08-21 12:15:05

标签: javascript node.js http cookies

我在expressJS服务器和VueJS字体结尾之间的cookie身份验证时遇到问题。

通过网站登录时,我在set-cookie标头中成功获取了HTTPOnly Cookie: Screenshot (Ignore the Auth header, using it for testing only)

我还看到了cookie in the devTools,而且一切看起来也不错,尽管我不是Cookie方面的专家,但它可能不正确

问题是,当我在另一个端点上请求用户的设置时,cookie没有发送到服务器。在服务器端处理此请求时,req.cookie对象为空。

这是我的提取代码:

const loginOptions = {
  method: 'POST',
  mode: 'cors',
  cache: 'no-cache',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    email: email,
    password: password,
  }),
  credentials: 'same-origin',
};

const settingsOptions = {
  method: 'GET',
  mode: 'cors',
  cache: 'no-cache',
  headers: {
    'Content-Type': 'application/json',
  },
  credentials: 'same-origin',
};

const loginResponse = await fetch(baseUrl + '/login', loginOptions);
const userSettings = await fetch(baseUrl + '/settings', settingsOptions);

我尝试使用credentials: "include",但没有成功。

在快递服务器上,我使用的是这样的cors:

app.use(cors({
    origin: '*',
    credentials: true,
}));

Here is also an example,在第二个请求中,当没有Cookie附加到请求时,服务器将设置403状态。

我尝试按照另一个线程中的建议将Cookie的域设置为localhost127.0.0.1I have left it on localhost for now

已解决

我在某处读到,您应该在创建cookie时向cookie添加特定的域值。如果我只是删除了该设置,那么我猜它会自动对其进行设置,然后就可以了!所以我的猜测是,我尝试将域值设置为错误的值

3 个答案:

答案 0 :(得分:0)

您的回复中有access-control-allow-origin: http://localhost:8080,表示您正在发出跨域请求。

您说:

credentials: 'same-origin',

…告诉您的客户端代码仅包含相同来源请求的凭据。

答案 1 :(得分:0)

我在某处读到Chrome对cookie和localhost env不友好,也许就是那样。

https://bugs.chromium.org/p/chromium/issues/detail?id=56211

此外,我前段时间在cookie,express和vueJS方面存在一些问题。

也许可以帮助您:SetCookie header not stored

答案 2 :(得分:0)

我在某处读到,您应该在创建cookie时向cookie添加特定的域值。如果我只是删除了该设置,那么我猜它会自动对其进行设置,然后就可以了!所以我的猜测是,我尝试将域值设置为错误的值