我正在开发一个使用Spotify API进行身份验证的应用程序。我正在使用passport-spotify这样做。我需要能够以我的根路由(/
)访问会话ID。
虽然我可以在使用Spotify进行身份验证后/callback
期间设置会话ID,但我无法在/
访问会话ID。有人可以向我解释如何在Express中的路由之间传递数据,以便在我通过身份验证后可以访问req.session.id
中的/
吗?
我会在这里分享我的终点:
/
app.get('/', cors(), (req, res) => {
if (req.session.id != null) {
res.json({isAuthenticated: true })
} else {
res.json({isAuthenticated: false, message: 'Please log in.' })
}
})
护照策略
passport.use(new SpotifyStrategy({
clientID: clientId,
clientSecret: clientSecret,
callbackURL: CALLBACK_URL
},
(accessToken, refreshToken, profile, done) => {
process.nextTick(function () {
let user = { spotifyId: profile.id, access_token: accessToken,
refresh_token: refreshToken }
return done(null, user)
})
}))
/auth/spotify
app.get('/auth/spotify',
passport.authenticate('spotify', {scope: ['user-read-email', 'user-
read-private'], showDialog: true}),
(req, res) => {
})
/callback
app.get('/callback', passport.authenticate('spotify', {
failureRedirect: '/', successRedirect: FRONTEND_URL }), (req, res,
next) => {
req.session.id = req.user.spotifyId
localStorage.setItem('access_token_' + req.session.id,
req.user.access_token)
localStorage.setItem('refresh_token_' + req.session.id,
req.user.refresh_token)
return next(null, req.session.id)
})
答案 0 :(得分:0)
无法以您提出问题的方式分享数据,其原因非常简单,它们是2个不同的req
个对象。
你可以做的是定义一个单独的middlware函数,如下所示:
function middlware(req, res, next) {
req.session.id = req.user.spotifyId;
next();
}
在Spotify middlware之后,你将这两个路径中的函数称为middlware。