Итак, я реализовал вход в Facebook с использованием Passport-js.Я также реализовал Cookie-стратегию для использования хорошего имени пользователя и пароля.Моя установка - это Express-js backend и React front-end.Backend и frontend работают на разных серверах и доменах (backend-client.com, frontend-client.com).
Все работает как очарование на localhost, но не на сцене и в производственной среде.Не знаю, имеет ли это значение, но я использую Heroku для размещения своих приложений.
Проблема:
Когда проверка подлинности facebook завершена, сервер Express перенаправляетпользователь веб-приложения.Файл cookie представляет собой JWT, содержащий информацию о пользователе, чтобы проверить, вошел ли пользователь в систему.
const cookieSettings = {
domain: process.env.COOKIE_DOMAIN,
secure : (process.env.APP_MODE === 'local' ? false : true),
httpOnly : true,
};
const cookieMaxAge = {
maxAge : 14 * 24 * 60 * 60 * 1000 // 14 days, 24h, 60 min, 60 sec * miliseconds
}
router.get('/auth/facebook/', passport.authenticate('facebook'));
router.get('/auth/facebook/callback', function(req, res, next) {
passport.authenticate('facebook', async function (err, profile, info) {
if (err || !profile) {
res.redirect(`${process.env.FRONTEND_BASE_URL}?success=0`);
}
const user = await User.findOne({ facebookId : profile.facebookId });
return user.generateAuthToken().then((token) => {
res.cookie(COOKIE_NAME, token.token, {...cookieSettings, ...cookieMaxAge});
res.redirect(`${process.env.FRONTEND_BASE_URL}?success=1`); // redirect back to frontend-client with cookie
});
})(req, res, next);
});
Когда пользователь нажимает / auth / facebook / callback, файл cookie присутствует
Однако, когда пользователь возвращается к клиенту веб-интерфейса, в заголовках ответа не отправляются файлы cookie.
Я не могу обернуться вокруг этого.Мне не хватает некоторых основ, касающихся файлов cookie?
Примечание: Когда пользователь входит в систему, используя имя пользователя и пароль,cookie возвращается пользователю.Метод входа в систему создается с помощью ajax-запроса с Axios, если это имеет значение.Так что я знаю, что нет проблем с настройками cookie, которые я использую.