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

Heroku stack从18升级至20后登录失效,Login cookies未设置问题

问题根因定位
  • Heroku Stack 20 反向代理配置变更:Stack 20 路由层默认将所有外部HTTPS请求降级为HTTP协议转发到应用实例,Express 官方默认不信任反向代理传递的X-Forwarded-*头,会将生产环境请求误判为非安全HTTP请求
  • Session Cookie 配置冲突:若你为生产环境的 Session Cookie 开启了secure: true配置,Express 会因误判当前请求为非安全协议,拒绝下发 Cookie 到浏览器
  • 跨域部署场景下的 SameSite 校验拦截:Stack 20 对应的默认 Node 运行时会启用更严格的 Cookie 同源校验规则,若前后端分属不同域名部署,未显式配置 SameSite 属性会导致浏览器主动拦截下发的 Cookie
解决方案

1. 开启 Express 代理信任配置

在 Express 入口文件的最顶部(所有路由、Session 中间件注册之前)添加如下配置,允许信任 Heroku 的第一层反向代理:

app.set('trust proxy', 1);

调整express-session中间件的 Cookie 配置,匹配 Heroku 生产环境要求:

app.use(session({
  secret: process.env.SESSION_SECRET, // 保留你原有密钥配置
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: process.env.NODE_ENV === "production", // 生产环境自动开启secure标记
    sameSite: process.env.NODE_ENV === "production" ? "none" : "lax", // 跨域场景必须设为none,同域部署可改为lax
    httpOnly: true,
    maxAge: 7 * 24 * 60 * 60 * 1000 // 按需调整Cookie有效期,这里示例为7天
  },
  // 保留你原有的store、name等其他配置项
}));

3. 清理构建缓存重新部署

清除 Heroku 上残留的 Stack 18 构建缓存,避免旧配置干扰,本地终端执行如下命令:
heroku builds:cache:purge -a 你的Heroku应用名称
执行完成后重新将代码推送到 Heroku 部署即可生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:24:04