我有两个 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/