You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Koa.js中已设置的JWT Cookie无法获取问题求助

问题诊断与解决方案

1. Cookie有效期设置错误

你代码里的 expires: new Date(Date.now() + 365) 是致命问题:Date.now() 返回毫秒数,加365意味着Cookie会在365毫秒后过期,几乎立刻失效,后续请求自然拿不到这个Cookie。

修复方法:将有效期改为合理时长,例如30天:

ctx.cookies.set('jwt', token, {
  httpOnly: true,
  expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000), // 30天有效期
  secure: process.env.NODE_ENV === 'production' ? true : false,
  sameSite: 'none',
});

2. SameSite: none 与 Secure 属性不兼容

当 sameSite 设为 none 时,浏览器强制要求Cookie必须设置 secure: true,否则会拒绝保存该Cookie。你的代码在开发环境下 secure 为 false,如果开发环境用HTTP协议,浏览器不会存储这个Cookie。

修复方案:

  • 开发环境用HTTP时,将 sameSite 改为 'lax' 或 'strict':
    ctx.cookies.set('jwt', token, {
      httpOnly: true,
      expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),
      secure: process.env.NODE_ENV === 'production' ? true : false,
      sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
    });
    
  • 若开发环境必须用 sameSite: none,则需配置HTTPS(如使用localhost自签名证书),同时强制 secure: true。

3. 验证Fetch请求配置

你的Fetch请求已设置 credentials: 'include',这部分是正确的,确保请求能携带Cookie。同域场景下用 'same-origin' 也可,但 'include' 兼容性更强。

额外排查步骤

打开浏览器开发者工具(Application > Cookies):

  • 若jwtCookie不存在,优先排查上述1、2点;
  • 若Cookie存在但请求未携带,检查请求的域名、路径是否匹配Cookie的domain和path设置(你的代码默认path为/,一般无问题)。

内容的提问来源于stack exchange,提问作者LosMos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:20:37