【问题标题】:redirect is not passing along the "req"重定向没有传递“req”
【发布时间】:2018-09-03 16:47:42
【问题描述】:

Routes.js

app.get('/auth/google/redirect', passport.authenticate('google'), (req, res) => {
    console.log('req.user:', req.user)  //>>>>>Outputs {username: 'bob', id: '..and so on'...}
    res.redirect('/profile/test')
})

profileRoutes.js

   app.get('/profile/test', (req, res) => {
        res.send('This is the req.user: ' + req.user);
    })

输出:“这是req.user:undefined

请注意,在重定向到/profile/test 之前,我成功地访问了routes.js 中的req.user,为什么route.js 中的req.user 变量没有传递给/profile/test


如果我不重定向,然后只发送req.user,它会按预期工作:

app.get('/auth/google/redirect', passport.authenticate('google'), (req, res) => {
        res.send(req.user)
    })

输出:{"_id":"5b8d42186cfd139c00c42c9","username":"Ryan Cameron","googleId":"11280041518849062335","__v":0}


我在 youtube 上关注 theNetNin​​ja 的教程,这对他很有用。所以很奇怪为什么变量没有被传递给我的新重定向路由,但它对他有用。 Watch it work for him

为什么req.user变量没有传递给重定向的路由?


我可以查询字符串中的变量传递给重定向的路由不会是安全。视频中的那个人没有这样做,他的代码和我上面的一样。但由于某种原因,它对我不起作用。为什么?

【问题讨论】:

  • 因为你没有为第二条路由设置认证中间件。
  • 没有迈克尔已经看到了。他正试图将一个变量传递给一个玉文件。这对我不起作用,我正在尝试将变量传递给重定向的路由。
  • @SLaks 这不应该是必要的,我想要的只是将变量传递给重定向的路线。
  • 重定向会导致来自浏览器的新请求。该请求不共享上一个请求的任何内容。

标签: javascript node.js express


【解决方案1】:

您提到的 repo 使用了一个护照会话,它将用户的 id 存储在一个 cookie 中,并对每个后续请求进行查找。

这是会话实例化的地方:https://github.com/iamshaunjp/oauth-playlist/blob/lesson-18/app.js#L23

这是他们将经过身份验证的用户的 userId 存储在 cookie 中的位置:https://github.com/iamshaunjp/oauth-playlist/blob/lesson-18/config/passport-setup.js#L6-L8

这是他们使用 cookie 中存储的 userId 对用户对象的每个请求进行数据库查找的地方:https://github.com/iamshaunjp/oauth-playlist/blob/lesson-18/config/passport-setup.js#L10-L14

编辑 当您在应用程序中重定向时变量 req.user 不存在的原因是因为您没有在每个请求上实例化 req.user 的代码设置(使用上面的三个链接来实现它)。

【讨论】:

  • 这没有回答问题:为什么变量没有传递到重定向的路由?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2014-05-04
  • 2015-10-05
相关资源
最近更新 更多