gpt4 book ai didi

node.js - Express 没有设置 cookie

转载 作者:IT老高 更新时间:2023-10-28 23:00:50 26 4
gpt4 key购买 nike

我在通过 express 设置 cookie 时遇到问题。我正在使用 Este.js dev stack 并尝试在 API auth /login 路由中设置一个 cookie。这是我在 /api/v1/auth/login 中使用的代码路线

res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999)});
res.status(200).send({user, token: jwt.token});

src/server/main.js 我已将 cookie-parser 注册为第一个中间件

app.use(cookieParser());

/api/v1/auth/login 路由的响应头包含

Set-Cookie:token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ.. 

但 cookie 未保存在浏览器中(document.cookie 为空,开发者工具中的 Resources - Cookies 选项卡也为空) :(

编辑:我发现当我在 /api/v1/auth/login 中调用它时(没有调用 res.sendres.json)

res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false});next();

然后设置 cookie 并且响应 header 已设置 X-Powered-By:Este.js ...这会将 esteMiddleware 设置为expres frontend rendering part .

当我使用 res.send

res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false}).send({user, token: jwt.token});`
next();

然后我得到错误 Can't set headers after they are sent. 因为使用了 send 方法,所以前端渲染抛出这个错误。

但是我必须从 API 发送数据,我该如何处理呢?

最佳答案

我有同样的问题。服务器响应带有 cookie 集:

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 

但是 cookie 没有被浏览器保存。

我就是这样解决的。

我在客户端代码中使用 fetch。如果您未在 fetch 选项中指定 credentials: 'include',则 cookie 既不会发送到服务器,也不会被浏览器保存,尽管服务器响应会设置 cookie。

例子:

var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');

return fetch('/your/server_endpoint', {
method: 'POST',
mode: 'same-origin',
redirect: 'follow',
credentials: 'include', // Don't forget to specify this if you need cookies
headers: headers,
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe'
})
})

关于node.js - Express 没有设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com