在 google OAuth 之后设置浏览器 cookie?

问题描述 投票:0回答:1

我在使用 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,但这并没有发生。

express oauth-2.0 express-session
1个回答
0
投票

几天前我遇到了类似的问题,我花了几个小时才找到解决方案......最后我发现这是浏览器(Chrome)的问题。

我尝试了另外 2 个“干净”的浏览器(即未安装扩展),Win PC 上的 Opera 和 MacBook 上的 Safari,并且 cookie 设置正确。

作为确认,我将 cookie 的

HttpOnly
标志设置为
false
并在 Chrome 控制台中尝试了
document.cookie
。 cookie 存在并已记录,即使它没有显示在 DevTools 应用程序选项卡中。

© www.soinside.com 2019 - 2024. All rights reserved.