Javascript NodeJS HTTPOnly cookie未使用fetch函数发送
我在expressJS服务器和VueJS字体端之间的cookie身份验证方面遇到问题 通过站点登录时,我在set Cookie标头中成功获取了HTTPOnly Cookie: 我也看到了,我觉得一切都很好,我不是饼干专家,所以这可能不正确 问题是,当我在另一个端点上请求用户设置时,cookie不会发送到服务器。在服务器端处理此请求时,Javascript NodeJS HTTPOnly cookie未使用fetch函数发送,javascript,node.js,http,cookies,Javascript,Node.js,Http,Cookies,我在expressJS服务器和VueJS字体端之间的cookie身份验证方面遇到问题 通过站点登录时,我在set Cookie标头中成功获取了HTTPOnly Cookie: 我也看到了,我觉得一切都很好,我不是饼干专家,所以这可能不正确 问题是,当我在另一个端点上请求用户设置时,cookie不会发送到服务器。在服务器端处理此请求时,req.cookie对象为空 这是我的获取代码: const loginOptions = { method: 'POST', mode: 'cors',
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);
我尝试使用凭据:“include”
,但没有成功
在express服务器上,我使用的cors如下所示:
app.use(cors({
origin: '*',
credentials: true,
}));
在第二个请求中,403
状态是在请求没有附加cookie时由服务器设置的
我已尝试将cookie的域设置为localhost
和127.0.0.1
,如另一个线程中建议的那样
解决了的
我在某个地方读到,在创建cookie时,应该向cookie添加特定的域值。如果我只是删除了那个设置,我猜它会自动设置,然后它就工作了!因此,我猜测我将域值设置为错误的值,用于我尝试执行的操作您的响应具有
访问控制允许来源:http://localhost:8080
这意味着您正在提出跨原产地请求
你说:
…这会告诉客户端代码只包含同源请求的凭据。我在某个地方读到Chrome对Cookie和localhost env不友好,可能就是这样 此外,几天前我在cookies、express和vueJS方面遇到了一些问题
也许它可以帮助您:我在某个地方读到,您应该在创建cookie时向cookie添加特定的域值。如果我只是删除了那个设置,我猜它会自动设置,然后它就工作了!因此,我的猜测是,我将域值设置为错误的值,用于我尝试执行的操作基本URL的值与加载调用
fetch()
的页面的URL之间的关系是什么?如果cookie被设置为localhost:3000
,那么浏览器只会将它们发送到localhost:3000
,而不会发送到任何其他端口。我认为您已经检查了开发工具中的第二个请求,查看cookie是否在请求头Roh中发送,并尝试firefox,为了排除其中一个答案中指出的chrome功能BaseURL的值为localhost:3000
,我正在从localhost:8080
发送请求。这就是问题所在吗?关于Chrome功能,我也尝试过firefox,在那里也是一样的unfortunately@JaromandaX我认为这不会将cookie发送到不同的方法/主机/端口组合。@JaromandaX如果您查看OP中链接的标题,该页面看起来像是从localhost:3000
加载的,而不是localhost:8080
。
credentials: 'same-origin',