Express 没有设置 cookie

新手上路,请多包涵

我在通过 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 develepoers 工具中的选项卡为空):(

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

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

然后设置 cookie 并且 响应标头已设置 X-Powered-By:Este.js …这将设置 esteMiddleware 在 expres 前端渲染部分

当我使用 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 发送数据,那么我该如何处理呢?

原文由 Mira 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 455
1 个回答

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

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

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

我就是这样解决的。

我在客户端代码中使用 fetch 。如果您没有在 --- 选项中指定 credentials: 'include' fetch 选项,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'
    })
})

原文由 Green 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题