【问题标题】:Failing to retrieve user after passport authentication护照认证后检索用户失败
【发布时间】:2015-08-01 12:01:40
【问题描述】:

如果认证成功,则用户被重定向到“/profile”路由,如下代码所示。

app.get(
        "/auth/google/callback",
        passport.authenticate("google", { successRedirect: "/profile", failureRedirect: "/failure" })
)

个人资料页面的路线如下所示。

app.get("/profile", function(req, res) {

    console.log("Attempting to render profile")
    console.log("USER: " + req.user)

    res.render("profile.jade", {
        user: req.user
    })
})

在控制台中,运行程序时,我看到“尝试呈现配置文件”,然后它显示用户对象,但在浏览器中,它似乎永远加载。它卡在 res.render("profile.jade", ... etc.

如果我关闭页面加载,在我关闭它后控制台会显示“GET /profile - - ms - -”

我的护照配置文件,使用 Google Oauth2 和 MySQL 如下所示。 https://gist.github.com/anonymous/6265a7779154a087b833

【问题讨论】:

  • 老实说,我对此不太了解,但是您不想像here 那样打电话给res.send 吗?
  • 你有你的app.js 或类似的东西来看看...我想知道是不是某些中间件或其他东西加载不正确?当你console.log(req)整个请求对象时,你得到什么了吗?
  • 现在它说“用户:[对象对象]”,然后永远加载。相同的代码。让我发送我的 app.js
  • 不要使用+,而是使用,,例如console.log("User", req);

标签: javascript node.js express oauth-2.0 passport.js


【解决方案1】:

因此,解决方法是将正确的变量传递给翡翠模板

【讨论】:

  • 如果您从profile.jade 中取出.jade,会发生什么?
  • 执行方式相同。具有 .jade 扩展名的其他路由也有效。此外,如果我删除了被输入渲染方法的用户对象并且只是执行 res.render('profile.jade") 它仍然会无限期加载。如果我关闭页面加载,在我关闭它之后控制台会显示“GET /profile - - 毫秒 - -"
  • 这到底是怎么回事!我从路由中删除了 console.log 语句,现在它加载了。但它似乎正在加载一个完全不同的页面。到底是什么!
  • 它会加载什么页面?
  • 页面加载不同是我的错。显然它没有加载,因为我使用了 Jade 页面上不存在的变量。您可以将其编辑到您的答案中,我会将其标记为已接受。感谢您的帮助!
【解决方案2】:

https://gist.github.com/anonymous/6265a7779154a087b833 行:63 你没有将 googleid 插入到数据库中,你怎么能把它弄出来

【讨论】:

  • 但它正在输出... req 中的用户显示正确,ID 正在插入到数据库中。见第 70-80 行。
  • 数据库中的名称与变量名不同。那部分有效。它将用户正确加载到 req 中。
猜你喜欢
  • 1970-01-01
  • 2017-09-27
  • 2013-06-09
  • 2018-06-20
  • 2013-05-27
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多