我在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的域设置为localhost
和127.0.0.1
。 I have left it on localhost
for now。
我在某处读到,您应该在创建cookie时向cookie添加特定的域值。如果我只是删除了该设置,那么我猜它会自动对其进行设置,然后就可以了!所以我的猜测是,我尝试将域值设置为错误的值
答案 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添加特定的域值。如果我只是删除了该设置,那么我猜它会自动对其进行设置,然后就可以了!所以我的猜测是,我尝试将域值设置为错误的值