2017-10-14 54 views
0

我正在研究一个使用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) 
}) 

回答

0

没有办法分享你问你的问题数据的方式,其原因很简单,他们是2个不同的req对象。

的你可以做什么,是定义一个单独的middlware功能,这样的事情:

function middlware(req, res, next) { 
    req.session.id = req.user.spotifyId; 
    next(); 
} 

你拨打这两个你击溃的是功能与Spotify的middlware后middlware。