Google OAuth 2.0重定向后Req.user与Session无法持久化求助
Google OAuth登录后Session/User无法持久化问题求助
我已经排查这个问题很久了,能梳理清楚流程但始终无法解决,希望各位能提供帮助。
核心问题:在Google OAuth登录流程中,回调重定向完成后,req.user和req.session无法在后续请求中持久化,但使用Passport本地邮箱/密码登录时完全正常。本地开发环境及Docker容器中Google OAuth功能一切正常,仅线上部署环境出现问题。
技术栈与部署环境
- 后端:Node.js + Express + Passport.js(Google OAuth2策略 + 本地登录策略)
- 前端:React,部署在Netlify
- 数据库:MongoDB Atlas
- 后端部署:Heroku
- 会话存储:express-session + connect-mongo(MongoStore)
核心代码片段
客户端Google登录触发函数
const onGoogleLogin = () => { try { window.open(`${process.env.REACT_APP_SERVER_URL}/api/auth/google`, "_self"); } catch (err) { toast.error(err.response.data); } };
后端Google OAuth路由配置
router.get("/google", passport.authenticate("google", ["profile", "email"])); router.get( "/google/callback", passport.authenticate("google", { failureRedirect: '/login/failed', prompt: 'consent', accessType: 'offline' }), (req, res) => { console.log("Session after Google auth:", req.session); console.log("User after Google auth:", req.user); res.redirect(process.env.CLIENT_URL); }, );
前端重定向后获取用户信息逻辑
const getGoogleProfile = useCallback(async () => { try { const res = await axios.get('/api/auth/login/success', { withCredentials: true, }); context.setUserData(res.data.user); } catch (err) { console.log(err); } }, []); useEffect(() => { getGoogleProfile(); }, [getGoogleProfile]);
后端/login/success路由
router.get("/login/success", (req, res) => { console.log(req.session) console.log(req.user) if (req.user) { res.status(200).json({ user: req.user, }); } else { res.status(403).send("Not authenticated"); } });
已验证的关键现象
- Google OAuth流程完成后,用户信息已成功写入MongoDB Atlas数据库
- MongoStore中能看到对应的Session记录,Passport序列化函数正常执行
- 回调路由中可以正常打印
req.user和req.session,数据完全正确 - 重定向到前端首页后,触发
/login/success请求时,后端打印req.session和req.user均为undefined,Passport反序列化函数未执行 - 无任何报错日志输出
已尝试的排查与修复动作
- 反复核对Google API控制台的回调地址、Heroku/Netlify的环境变量配置(均正确)
- 在回调路由中手动调用
req.session.save(),无改善 - 调整CORS配置,尝试放宽跨域限制(包括credentials、origin等参数)
- 修改express-session的配置:调整
secure、sameSite、domain、path等cookie属性 - 调整Passport策略的配置参数,重新生成Google OAuth凭据
- 检查Heroku的会话存储配置,确认MongoStore连接正常
目前暂时考虑更换部署平台或会话存储方案,但希望能找到根本原因解决问题,恳请各位提供思路。
内容的提问来源于stack exchange,提问作者Drail
相关产品推荐
相关产品推荐

