无法在生产中删除 nextjs 上的 cookie

Hen*_*mos 0 session-cookies node.js next.js

我正在 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: "/",
        })
]);
Run Code Online (Sandbox Code Playgroud)

这部分代码工作得很好,它在浏览器中设置了 cookie。/api/logout但是,当我注销时,我向执行此代码的url 发出请求:

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 });
};
Run Code Online (Sandbox Code Playgroud)

但它似乎在生产中不起作用。当我在本地主机时,它会删除 cookie 并更改它们的值。然而在生产中没有任何改变。到期日、价值和其他一切都保持不变。难道我做错了什么?当用户注销时,是否有其他方法可以删除此 cookie?

Nic*_*s D 11

您使用 Vercel 作为部署平台吗?导致此错误的原因是 Next.js 的无服务器功能始终返回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!' });
};
Run Code Online (Sandbox Code Playgroud)