我目前正在进行需要使用httpOnly cookie的项目。该项目需要直接调用API。
让我们说它验证用户登录尝试的xxx.com/vx/auth/login
。该端点将为客户端提供响应并设置cookie。像这样:
Set-Cookie:token=eyJ0b2tlbiI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUoxYVdRaU9pSXhNREEwT0RJd05DSXNJbDlwWkNaNkluWXhYM1Z6WlhKekx6RXdNRFE0TWpBMElpd2libUZ0WlNJNklrRm5kVzVuSUZOMWNubGhJRUpoYm1kellTSXNJbVZ0WVdsc0lqb2ljR0ZwYm1GdVpHVnpkR2x1WldSQWVXRm9iMjh1WTI5ddlpd2liR1YyWld3aU9qQXNJbWxoZENJNk1UUTNOek0zTVRnMk55d2laWGh3SWpveE5EYzNOVFEwTmpZc2ZRLmtUN0IzNW9YYjQ2RmU3WWFLYkd4MXhoYkdGUWJ1TFg1U053N3FWSjNfa2siffQ==; expires=Thu, 27 Oct 2016 05:04:27 GMT; path=/; HttpOnly
但是当我查看devtools
时,cookie未设置。甚至在我刷新几次之后。
我在这里想念什么?我是否需要创建代理来处理此问题? *我曾经使用代理,它运作良好
答案 0 :(得分:2)
我终于通过与后端工程师协调解决了这个问题:
Access-Control-Allow-Credentials: true
在请求中,我将withCredentials
设置为true
。
注意:如果您将withCredentials
设置为true
,则还必须将Access-Control-Allow-Credentials
设置为true
。另外,如果您仍然在Access-Control-Allow-Origin
使用通配符,那么这项工作将无法使用。
答案 1 :(得分:0)
在我的情况下,我使用的是相同的域(无芯)。
我发现:除非您设置凭据初始化选项,否则获取不会发送cookie:
fetch(url, {
method: 'POST',
credentials: 'same-origin',
headers: {...},
...
});
答案 2 :(得分:0)
目前,我做了这样的事情。
Mapper_1
Mapper_2
NullpointerExcpetion
和
//API REST ROUTE
app.get('/login', function(req, res){
console.log('login route', process.env.NODE_ENV);
const token = '*/*--=3432432$%^%$'
res.set('Access-Control-Allow-Origin', req.headers.origin); //req.headers.origin
res.set('Access-Control-Allow-Credentials', 'true');
// access-control-expose-headers allows JS in the browser to see headers other than the default 7
res.set(
'Access-Control-Expose-Headers',
'date, etag, access-control-allow-origin, access-control-allow-credentials'
);
res
.cookie('rest-auth-cookie', token, {
httpOnly: true,
// secure: process.env.NODE_ENV !== 'development',
sameSite: 'strict',
// maxAge: 100,
path: '/'
})
.status(200)
.json({message: 'success'})
});