【问题标题】:res.clearCookie function doesn't delete cookiesres.clearCookie 函数不会删除 cookie
【发布时间】:2019-09-05 10:25:41
【问题描述】:

我正在为我的 express(使用 typescript)应用程序创建一个授权系统,我使用 JWT 并将它们保存到 cookie 中以保持用户登录。我的注销部分有问题,而 res.clearCookie() 没有删除 cookie。

我在索引文件中使用了 cookie-parser,并尝试使用空值或现在的到期日期重置 cookie,但它对我不起作用。正如我上面所说 res.clearCookie("jwt") 也不起作用。所有依赖项都是最新的。

登录和登录验证工作正常,我可以正确设置和读取 [和解码] JWT。

登录代码的主要部分

res.cookie("jwt", token, {
   httpOnly: true,
   expires: new Date(
       Date.now() + 1000 * 86400 * stayLoggedInDays
   )
}).send("Message: Login successful");

退出代码

router.post(
  "/logout",
  (req, res, next) => {
    res.clearCookie("jwt");
    next();
  },
  (req, res) => {
    console.log(req.cookies);
    res.end("finish");  
  }
);

注销后我仍然可以看到用户个人资料,但如果我从邮递员手动删除 cookie,个人资料页面将不会显示任何信息,因此我的结论是 express 无法清除 cookie。

【问题讨论】:

    标签: javascript node.js typescript express cookies


    【解决方案1】:

    我相信您的问题是您没有将 options 参数传递给 clearCookie() 并且客户端没有清除 cookie,因为它不相同。根据Express documentation

    Web 浏览器和其他兼容客户端仅在给定选项与 res.cookie() 提供的选项相同时才会清除 cookie,不包括 expires 和 maxAge。

    还发现了一个GitHub issue on the express repo,它声明了相同的内容并显示了传递域和路径的示例:

    res.clearCookie('my_cookie', {domain: COOKIE_DOMAIN, path: COOKIE_PATH});
    

    【讨论】:

    • 我有机器人域和路径,但仍未删除
    • 相同的设置也适用于 Fastify 服务器,至少从今天开始 :)
    • 我在res.cookie 的选项中使用了httpOnlysecure。我也应该将它们添加到res.clearCookie 吗?
    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2012-05-23
    • 2013-05-28
    • 2016-04-16
    • 2015-12-12
    相关资源
    最近更新 更多