无法在生产中删除 nextjs 上的 cookie
Not being able to remove cookies on nextjs in production
我正在 NextJs 中创建一个应用程序,并在用户登录时设置 cookie 授权:
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", `Bearer ${jwtGenerated}`, {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 60 * 60 * 12,
path: "/",
})
]);
这部分代码运行良好,它在浏览器中设置了 cookie。但是,当我注销时,我向执行此代码的 url /api/logout
发出请求:
import cookie from "cookie";
export default (req, res) => {
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", "false", {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 5,
path: "/",
})
]);
return res.status(200).json({ roles: null, auth: false });
};
但是它似乎在生产中不起作用。当我在 localhost 时,它会删除 cookie 并更改它们的值。但是在生产中没有任何改变。到期时间保持不变,价值和其他一切。
难道我做错了什么?当用户注销时,还有其他方法可以删除此 cookie 吗?
您是否使用 Vercel 作为部署平台?这个错误是因为 Next.js 的无服务器特性总是 return 一个 304 Not Modified
。坦率地说,我不知道为什么会在服务器上发生这种情况,但我相信它与 Next.js 内部的 HTTP 请求有关。
为了解决这个问题,我将注销请求设为 POST
带有静态密钥的请求。这将防止 304 Not Modified
错误发生。
import cookie from "cookie";
export default (req, res) => {
if (req.method !== 'POST') return res.status(405).json({ status: 'fail', message: 'Method not allowed here!' });
if (req.body.key === 'static_key') {
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", "false", {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 5,
path: "/",
})
]);
return res.status(200).json({ roles: null, auth: false });
}
return res.status(400).json({ status: 'fail', message: 'Bad request happened!' });
};
我正在 NextJs 中创建一个应用程序,并在用户登录时设置 cookie 授权:
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", `Bearer ${jwtGenerated}`, {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 60 * 60 * 12,
path: "/",
})
]);
这部分代码运行良好,它在浏览器中设置了 cookie。但是,当我注销时,我向执行此代码的 url /api/logout
发出请求:
import cookie from "cookie";
export default (req, res) => {
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", "false", {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 5,
path: "/",
})
]);
return res.status(200).json({ roles: null, auth: false });
};
但是它似乎在生产中不起作用。当我在 localhost 时,它会删除 cookie 并更改它们的值。但是在生产中没有任何改变。到期时间保持不变,价值和其他一切。 难道我做错了什么?当用户注销时,还有其他方法可以删除此 cookie 吗?
您是否使用 Vercel 作为部署平台?这个错误是因为 Next.js 的无服务器特性总是 return 一个 304 Not Modified
。坦率地说,我不知道为什么会在服务器上发生这种情况,但我相信它与 Next.js 内部的 HTTP 请求有关。
为了解决这个问题,我将注销请求设为 POST
带有静态密钥的请求。这将防止 304 Not Modified
错误发生。
import cookie from "cookie";
export default (req, res) => {
if (req.method !== 'POST') return res.status(405).json({ status: 'fail', message: 'Method not allowed here!' });
if (req.body.key === 'static_key') {
res.setHeader("Set-Cookie", [
cookie.serialize("authorization", "false", {
httpOnly: true,
secure: process.env.NODE_ENV !== "development",
sameSite: true,
maxAge: 5,
path: "/",
})
]);
return res.status(200).json({ roles: null, auth: false });
}
return res.status(400).json({ status: 'fail', message: 'Bad request happened!' });
};