Как аутентифицировать пользователей в React с помощью PassportJs и Express back-end - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть приложение, созданное с Node, Express и MongoDB, где я рендерил все на сервере с помощью движка шаблонов ejs.Я нахожусь в процессе переписывания интерфейса с React.Моя цель - сделать это SPA и использовать бэкэнд в качестве API.Большая часть этого довольно проста, поскольку я просто проксирую свои /api маршруты к внутреннему порту и возвращаю данные в React с помощью json.Однако я испытываю затруднения при получении аутентификации для работы.

Я использую PassportJs со стратегией Twitter.Вход в систему должен направлять к /auth/twitter согласно документам.

app.get('/auth/twitter', passport.authenticate('twitter'));

Сервер обрабатывает аутентификацию, но затем перенаправляет пользователя на указанный маршрут следующим образом:

app.get('/auth/twitter/callback',
  passport.authenticate('twitter', { successRedirect: '/',
                                     failureRedirect: '/login' }));

Теперь это проблема, потому что мне нужно, чтобы React знал,Пользователь был аутентифицирован, и мне нужно иметь возможность делать последующие запросы к API, используя аутентифицированного пользователя.Я реализовал session-store на серверной части, которая позволяет пользователю войти в систему в течение определенного периода времени.

Существует ли простое решение, позволяющее мне повторно использовать весь свой серверный код?Возможно использование API Fetch для направления пользователя на /auth/twitter и получения пользователя и необходимых токенов в качестве объекта json в обещании.Если нет, я был бы признателен за некоторые предложения, чтобы указать мне в правильном направлении.Мой основной источник путаницы заключается в том, что на бэкэнде я просто обрабатывал все с помощью перенаправлений и рендеринга, но из-за того, что клиент сидит на другом порту (и, возможно, на сервере), перенаправление на представление, представленное сервером, больше не является опцией,

...