我在使用 google oauth 验证用户身份时遇到问题。特别是在用户浏览器中设置会话 cookie。
我的前端:
function handleGoogleRegister() {
window.location.href = `http://localhost:3002/auth/google`;
}
后端:
router.get('/google',
passport.authenticate('google', { scope: ['profile', 'email'] })
);
// Callback route after Google authentication
router.get('/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
(req, res) => {
// Successful authentication
console.log("GOOGLE SUCCESS")
console.log(req.user)
req.session.user = {id: req.user.user_id, username: req.user.username}; // Set session cookie
console.log(req.session.user)
res.redirect(`${process.env.CORS_ORIGIN_URL}/register`);
此后,用户的浏览器中不会设置任何 cookie。但是当我 console.log
req.session.user
时,它会记录预期的数据。但由于某种原因,浏览器中没有设置 cookie。在我看来,这是有道理的。因为 /google/callback
是由 Google 请求的,而不是我的前端......或者?非常感谢对此的任何意见..
我希望在浏览器中设置 cookie,但这并没有发生。
几天前我遇到了类似的问题,我花了几个小时才找到解决方案......最后我发现这是浏览器(Chrome)的问题。
我尝试了另外 2 个“干净”的浏览器(即未安装扩展),Win PC 上的 Opera 和 MacBook 上的 Safari,并且 cookie 设置正确。
作为确认,我将 cookie 的
HttpOnly
标志设置为 false
并在 Chrome 控制台中尝试了 document.cookie
。 cookie 存在并已记录,即使它没有显示在 DevTools 应用程序选项卡中。