Я настроил стратегию паспорта spotify с помощью dong Монго для сохранения профиля пользователя, доступа и обновления токенов.Но кроме первоначального маршрута авторизации и URL-адреса обратного вызова, нужно ли передавать passport.authenticate в качестве обратного вызова на каждый маршрут?Или я должен иметь специальное промежуточное программное обеспечение, которое проверяет, есть ли в модуле cookie-сессии req.user по запросу?Я вижу это как две возможности.Какой правильный?Я знаю, что на стороне куки он в конце концов истечет, и маршрут / auth нужно будет вызывать снова.
Я сделал функцию промежуточного программного обеспечения, которая проверяет пользовательское свойство объекта запроса.Но я не уверен, как это проверить.Возможно, сокращение срока действия куки и проверка req.user ложно.
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id)
.then((user) => {
done(null, user);
});
});
passport.use(new SpotifyStrategy({
clientID: keys.spotifyClientID,
clientSecret: keys.spotifyClientSecret,
callbackURL: '/auth/spotify/callback',
proxy: true
}, async (accessToken, refreshToken, profile, done) => {
const spotifyId = profile.id
const name = profile.displayName
const email = profile.emails[0].value
const existingUser = await User.findOne({ spotifyId: profile.id });
if (existingUser) {
return done(null, existingUser);
}
const user = await new User({ spotifyId, name, accessToken, refreshToken}).save();
done(null, user);
}));
Check the cookie middleware:
module.exports = isAuthenticated = (req, res, next) => {
if (req.user) {
return next();
}
return res.redirect('/auth/spotify');
}
Example route:
module.exports = (app) => {
app.get('/api/spotify/playlists', passport.authenticate('spotify'),
(req, res) => {
console.log('got here')
console.log(req.user);
//return playlists
});
}