node.js - Nextjs-api 路由,如何从标题中删除 cookie?

标签 node.js express cookies next.js

我有两个 API 路由,我想在 /api/login.js 中设置两个 cookie并在 /api/logout.js 中删除它们.

所以这是我的登录 API:

import { serialize } from 'cookie';

export default async (req, res) => {
  res.setHeader('Set-Cookie', [
    serialize('mytoken1', 'mytoken1Value', {
      path: '/',
    }),
    serialize('mytoken2', 'mytoken2Value', {
      path: '/',
    }),
  ]);

  res.writeHead(302, { Location: '/' });
  res.end();
}

这是我的注销 API:
export default async (req, res) => {
  res.removeHeader('Set-Cookie')

  res.writeHead(302, { Location: '/api/login' });
  res.end();
}

但注销不会删除 cookie,所以我仍然可以在 中看到它们_app.js ---console.log(req.headers.cookie)--- 当我重新加载页面时。您知道在这种情况下如何删除 cookie 吗?

最佳答案

因此,在对每个解决方案进行了太多挑战之后,我最终得到了这个,并且效果很好:

(我有多个 cookie,我不得不使用 nodejs 方法,因为我在没有任何中间件的情况下在 nextjs API 路由中编码)

export default async (req, res) => {
  /* remove cookies from request header */
  res.setHeader('Set-Cookie', [
    serialize('mytoken1', '', {
      maxAge: -1,
      path: '/',
    }),
    serialize('mytoken2', '', {
      maxAge: -1,
      path: '/',
    }),
  ]);

  res.writeHead(302, { Location: '/api/login' });
  res.end();
}

关键是 maxAge 应该是 -1 以使其过期。我用 Date.now() 试过了。当您有多个 cookie 时,您必须在对它们进行操作后结束响应。

关于node.js - Nextjs-api 路由,如何从标题中删除 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62101821/

相关文章:

javascript - 如何从关联模型中获取对象?

javascript - Cookie 并不总是保存 > 触发基于 cookie 的功能

node.js - 使用 nant 通过 exec 编译 LESS

node.js - 如何使用 Node.js Driver for DataStax graph 运行 OLAP 查询?

javascript - 通过 Javascript/Web 浏览器编码 MPEG 电影?

linux - 如何在 Linux (Fedora-15) 上管理 Node.js 应用程序

node.js - 如何在express js中使用特定字段而不是id进行查询

javascript - 如何完全删除具有所有功能甚至包括 setInterval 的 nodejs 模块?

php - 结合 cookie 和 session

php - session 销毁(); $_SESSION = 数组();和 $unset($_SESSION);不适用于 IE10?