Я использовал Паспорт на моем сервере для аутентификации пользователей. Когда пользователь подписывается локально (используя имя пользователя и пароль), сервер отправляет им JWT, который хранится в localstorage, и отправляется обратно на сервер для каждого вызова api, требующего аутентификации пользователя.
Теперь я хочу поддерживать Facebook и Google login. Поскольку я начал с Passport, я подумал, что лучше продолжить стратегии Passport, используя паспорт-facebook и паспорт-google-oauth.
Я буду ссылаться на Facebook, но обе стратегии ведут себя одинаково. Они оба требуют перенаправления на маршрут сервера ( '/auth/facebook' и '/auth/facebook/callback', если на то пошло). Процесс успешно подходит для сохранения пользователей, включая их facebook\google ids и токены в БД.
Когда пользователь создается на сервере, создается JWT (без какой-либо опоры на токен, полученный из facebook\google).
... // Passport facebook startegy
var newUser = new User();
newUser.facebook = {};
newUser.facebook.id = profile.id;
newUser.facebook.token = token; // token received from facebook
newUser.facebook.name = profile.displayName;
newUser.save(function(err) {
if (err)
throw err;
// if successful, return the new user
newUser.jwtoken = newUser.generateJwt(); // JWT CREATION!
return done(null, newUser);
});
Проблема заключается в том, что после ее создания я не нашел подходящего способа отправить JWT клиенту, так как я также должен перенаправить свое приложение.
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
session: false,
successRedirect : '/',
failureRedirect : '/'
}), (req, res) => {
var token = req.user.jwtoken;
res.json({token: token});
});
Код выше перенаправляет меня на главную страницу моего приложения, но я не получаю токен. Если я удалю successRedirect, , я получаю токен, но я не перенаправлен на свое приложение.
Любое решение для этого? Является ли мой подход неправильным? Любые предложения сделают.