Google APi + Passport + React: процесс аутентификации - PullRequest
0 голосов
/ 18 февраля 2020

Я использую паспорт для аутентификации с помощью Google API, я отправляю токен по URL-адресу клиенту (приложение React), которое сохраняет его в localStorage.

Я хочу использовать этот токен: С при каждом вызове API (получить, отправить, поместить) я хочу отправить этот токен на сервер, но я не знал, как проверить этот токен на стороне сервера.

Passport Startegy:

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

Аутентификация:

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 в express (который содержит методы CRUD):

app.use('/api', movieRouter)

На стороне реакции: Получение токена

  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("/");
    }
  }

Выполнение вызовов API:

import axios from 'axios'

const api = axios.create({
    baseURL: 'http://localhost:3000/api',
})

export const insertMovie = payload => api.post(`/movie`, payload)

Мне просто нужно отправлять токен при каждом вызове и проверять его на стороне сервера.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Если токен правильно установлен клиентом в заголовке, сеансе или процессе ie, как отметил Билл Меткалф, тогда express может аутентифицировать маршрут / конечную точку, добавив функцию промежуточного программного обеспечения passport.authenticate в маршрут, как это

app.use('/api', passport.authenticate('google', {failureRedirect:'/login'}), movieRouter)

См. http://www.passportjs.org/docs/google/ для получения дополнительной информации

0 голосов
/ 18 февраля 2020

Скорее всего, вы хотите установить токен в заголовке, попробуйте сменить ваш клиент ios на что-то вроде

const api = axios.create({
  baseURL: 'http://localhost:3000/api',
  headers: {
    Authorization: `Bearer ${your_token_here}`
  }
})

Я не на 100% уверен, что это правильная форма заголовка, которая паспорт будет ожидать, но это общая идея, которую вам нужно сделать.

...