我读了一篇有趣的文章,介绍如何使用护照关联帐户:
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()
}