MAEN应用中Passport.js设置secure:true时无法发送会话Cookie的问题
环境与配置信息
身份认证方案:Passport.js
CORS配置:
app.use(cors({ origin: ENV, credentials: true }));其中
ENV配置为前端部署URL(前端部署在Vercel),后端部署于Back4App。Express会话及相关配置:
app.set("trust proxy", 1); app.use(cookieParser()); app.use( session({ secret: "wonttellyou", resave: false, saveUninitialized: false, cookie: { path: "/", httpOnly: true, maxAge: 1000 * 60 * 60 * 24, sameSite: "none", secure: true, }, }) ); app.use(express.urlencoded({ extended: true })); app.use(passport.initialize()); app.use(passport.session());
问题现象
- 当会话Cookie的
secure属性设为false时,Firefox中认证流程正常,但Chrome强制要求该属性必须为true - 将
secure设为true后,后端会话已成功创建(req.sessionStore.sessions显示内容如下),但前端无法接收到Cookie:izFjwfnGUAVrRSJU1eWJqzOTEeGI-Cmz':
'{"cookie":{"originalMaxAge":86400000,"expires":"2023-09-03T16:19:15.519Z","secure":true,"httpOnly":true,"path":"/","sameSite":"none"},"passport":{"user":"643026b271b721a7aa08f4fd"}}'
已尝试的解决操作
- 修改CORS的
origin、exposedHeaders配置参数 - 多次调整Express Session的各项配置
- 尝试通过
res.cookie直接发送Cookie,此方式可正常传递 - 确认前端请求已携带
withCredentials标识 - 经多次尝试,问题仍未解决
内容的提问来源于stack exchange,提问作者Nuss
相关产品推荐
相关产品推荐

