2017-10-14 16 views
0

Je travaille sur une application qui s'authentifie avec l'API de Spotify. J'utilise passport-spotify pour le faire. Je dois être en mesure d'accéder à un ID de session à mon itinéraire racine (/).Comment puis-je partager des données entre des itinéraires sur l'objet de requête dans Express?

Bien que je puisse définir l'ID de session pendant le /callback après l'authentification avec Spotify, je ne peux pas alors accéder à l'ID de session au /. Est-ce que quelqu'un peut m'expliquer comment passer des données entre les routes dans Express pour pouvoir accéder à req.session.id en / après m'être authentifié?

Je vais partager mes points de terminaison ici:

/

app.get('/', cors(), (req, res) => { 
    if (req.session.id != null) { 
    res.json({isAuthenticated: true }) 
} else { 
    res.json({isAuthenticated: false, message: 'Please log in.' }) 
} 

})

Stratégie Passeport

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) 
}) 

Répondre

0

Il n'y a aucun moyen de partager des données de la façon dont vous avez posé votre question, et la raison de celle-ci est très simple, ils sont 2 différents req objets.

ce que vous pouvez le faire, est de définir une fonction middlware séparée, quelque chose comme ceci:

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

Et vous appelez cette fonction à la fois de vos déroutes comme middlware après la middlware Spotify.