使用护照的帐户链接,无需会话

时间:2019-07-08 12:38:58

标签: node.js passport.js

我读了一篇有趣的文章,介绍如何使用护照关联帐户:

https://codeburst.io/account-linking-with-passportjs-in-3-minutes-2cb1b09d4a76

passport.use(
  new GitHubStrategy(
    {
      clientID: process.env.GithubClientID,
      clientSecret: process.env.GithubClientSecret,
      callbackURL: process.env.GithubCallbackURL,
      passReqToCallback: true
    },
    (req, accessToken, refreshToken, profile, cb) => {
      const { email, name, id } = profile._json

      // Check if user is auth'd
      if (req.user) {
        // Link account
      } else {
        // Create new account
      }
    }
  )
)

有趣的是,他检查用户是否已登录。如果用户已登录,则链接用户帐户

if (req.user) {
   // Link account
} else {
   // Create new account
}

我不知道为什么req对象有用户?也许用户来自会话,但是在我的NodeJS应用程序中,我使用令牌代替会话。我的问题是如何不使用会话(我使用jwt)将用户对象附加到req?

我确实喜欢这样,但是req.user是未定义的

router
    .route('/google')
    .get(
        checkToken(true),
        passport.authenticate('google', {scope: 'profile email'}),
    )

checkToken是一个函数,如果我们有有效的令牌,则它将使用userId(在令牌中找到)获取用户对象,然后将其附加到req。像这样

if (validToken) {
    const id = fromToken(token)
    const user = await User.findById(id)
    req.user = user
    next()
}

0 个答案:

没有答案