J'utilise le passeport pour m'authentifier à l'aide de l'API Google, j'envoie un jeton par URL au client (React app) qui l'enregistre dans le localStorage.
Je veux utiliser ce token : à chaque appel API (get, post, put) je veux envoyer ce token au serveur, mais je ne sais pas comment vérifier ce token côté serveur.
Stratégie de passeport :
app.use(passport.initialize()); // Used to initialize passport
app.use(passport.session()); // Used to persist login sessions
passport.use(new GoogleStrategy({
clientID: 'IDxxxxx',
clientSecret: 'SecreXXX',
callbackURL: 'http://localhost:3000/callback'
},
(accessToken, refreshToken, profile, done) => {
// Directory API here
var userData = {
name: profile.displayName,
token: accessToken
};
done(null, userData);
Authentification :
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile'] // Used to specify the required data
}));
// The middleware receives the data from Google and runs the function on Strategy config
app.get('/callback', passport.authenticate('google'), (req, res) => {
var token = req.user.token;
res.redirect("http://localhost:8000?token=" + token);
});
API en express (qui contient des méthodes CRUD) :
app.use('/api', movieRouter)
Dans react side : Obtenir le jeton
componentWillMount() {
var query = queryString.parse(this.props.location.search);
if (query.token) {
window.localStorage.setItem("jwt", query.token);
// appel a directory api (avec token) puis sauvergarder dans redux puis redirection vers liste demandes
this.props.history.push("/");
}
}
Faire des appels à l'API :
import axios from 'axios'
const api = axios.create({
baseURL: 'http://localhost:3000/api',
})
export const insertMovie = payload => api.post(`/movie`, payload)
Il me suffit d'envoyer le jeton à chaque appel et de le vérifier côté serveur.
Remerciements