如何在Express中的请求对象上的路由之间共享数据?
问题描述:
我正在研究一个使用Spotify API进行身份验证的应用程序。我正在使用passport-spotify这样做。我需要能够访问我的根路由的会话ID(/
)。如何在Express中的请求对象上的路由之间共享数据?
虽然我能够与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)
})
答
没有办法分享你问你的问题数据的方式,其原因很简单,他们是2个不同的req
对象。
的你可以做什么,是定义一个单独的middlware功能,这样的事情:
function middlware(req, res, next) {
req.session.id = req.user.spotifyId;
next();
}
你拨打这两个你击溃的是功能与Spotify的middlware后middlware。