当前位置: 首页 > 知识库问答 >
问题:

无法删除生产中nextjs上的Cookie

华君浩
2023-03-14

我正在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时,它会删除cookies并更改它们的值。然而,在生产过程中,没有任何变化。到期保持不变,价值和其他一切。我做错什么了吗?当用户注销时,是否有其他方法可以删除此cookie?

共有1个答案

谭志用
2023-03-14

您使用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!' });
};
 类似资料:
  • 这只是为了删除。插入和检索工作良好。 我在谷歌搜索这个问题,但唯一的结果是解决了封闭的结果集,而这里不是这样。

  • 更新:移动了删除部分,在setState之前,我得到了错误:一个被解雇的可解雇小部件仍然是树的一部分,每次我刷到解雇

  • 嗨,我试图简单地从使用猫鼬的集合中删除一个文档,但由于一些奇怪的原因,我无法让它工作。 代码如下: 有人能帮我解释一下语法吗?我知道_id被存储为新的ObjectId(“5214f4050acb53fe31000004”),但我试过了却没有乐趣? 谢谢

  • 问题是: 格式如下:2015-10-23T03:34:40 当我试图这样解决问题时: 我在另一个地方遇到问题。Java需要在我的服务calass中将type更改为String类型: 如果我将更改为,则无法使用方法plusDay(1):((( 我也尝试了这样的方法: 格式与字符相同' T' 2018-09-13T05:42:28 这种方式也不适合我: 因为a不能将类型改为字符串 这种方式不起作用,因

  • 我在表中添加了一列(下面的查询) 现在我想删除这个专栏(fk_job_id)。我尝试了这些查询,但它们给出了错误。 第一个Alter语句给出的错误为-(但该列存在)。 第二个Alter语句给出错误,因为-