【问题标题】:passport req.isAuthenticated() always returns fasle护照 req.isAuthenticated() 总是返回 false
【发布时间】:2016-04-01 23:04:21
【问题描述】:

我正在尝试使用快速会话来登录用户。我希望用户能够转到个人资料页面并查看他们的用户数据(如果他们已登录)。

在我的 routes.js 的第 9 行:req.isAuthenticate() 正在返回 false,即使我已经成功登录了一个用户。

我的最终目标是 req.user,该护照保存到会话中,在 /passport GET 路由中定义,以便我可以将其作为数据发送到我的模板引擎。

https://gist.github.com/anonymous/f6ecb472eb082775181e#file-routes-js-L9

提前致谢

【问题讨论】:

  • 是未定义还是返回true?你有app.use(passport.initialize());吗?
  • 一次 console.log(req.user);在路线中。
  • @KethaKavya 如果我在路由中使用 console.log(req.user),它在我的 GET /login 路由中按预期工作,但在我的 GET /profile 路由中它未定义,即使我已经成功登录用户。见我的另一篇帖子stackoverflow.com/questions/34477443/…
  • @Aᴍɪʀ 抱歉,错字,req.isAuthenticate() 返回错误。是的,我在第 33 行有 app.use(passport.initialize()) 用于 express.js 文件gist.github.com/anonymous/…
  • 你使用的是https还是http?登录后能否检查一下浏览器上是否已有cookie?

标签: javascript node.js session express passport.js


【解决方案1】:

我认为您的序列化/反序列化有问题。

在序列化时,您需要指定如何序列化用户。根据您的代码,您正在使用用户的 id 来序列化它们。这就是将用于反序列化的内容。因此,您应该期望输入参数中只有一个 ID,并且您必须找到链接到该 ID 的用户并将其传递给回调。

这就是你应该做的:

passport.serializeUser(function(user, done){
  done(null, user.id)
})

passport.deserializeUser(function(id, done){
  User.findById(id, function(err, user){
    done(err, user)
  })
})

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2015-05-20
    • 1970-01-01
    • 2020-06-10
    • 2014-03-24
    • 2017-11-14
    • 2015-09-28
    • 2018-08-06
    • 2021-04-03
    相关资源
    最近更新 更多