Как правильно использовать passport-github для аутентификации REST API?
Я создаю клиент vue.js, который должен быть аутентифицирован через github oauth с использованием экспресс-сервера. Это легко сделать с помощью рендеринга на стороне сервера, но REST API доставил мне много хлопот.
Я установил URL-адрес домашней страницы как " http://localhost:3000/", где работает сервер, и я хочу, чтобы URL-адрес обратного вызова авторизации был " http://localhost:8080/" (в котором размещен клиент). Вместо этого я перенаправляю на " http://localhost:3000/auth/github/redirect", а в обратном вызове перенаправляю на " http://localhost:8080/". Проблема, с которой я сталкиваюсь, заключается в том, что я не могу отправить пользовательские данные клиенту vuejs через res.redirect. Я не уверен, правильно ли я это делаю.
router.get("/github", passport.authenticate("github"));
router.get(
"/github/redirect",
passport.authenticate("github", { failureRedirect: "/login" }),
(req, res) => {
// res.send(req.user);
res.redirect("http://localhost:8080/"); // req.user should be sent with this
}
);
1 ответ
В качестве обходного пути я реализовал следующий подход:
Маршрут, который возвращает данные пользователя в запросе get:
router.get("/check", (req, res) => {
if (req.user === undefined) {
res.json({});
} else {
res.json({
user: req.user
});
}
});
Клиентское приложение запускает этот API сразу после перенаправления вместе с некоторыми необходимыми заголовками:
checkIfLoggedIn() {
const url = `${API_ROOT}auth/check/`;
return axios(url, {
headers: { "Content-Type": "application/json" },
withCredentials: true
});
}
Чтобы включить учетные данные, мы должны передать следующие параметры при настройке cors:
var corsOption = {
origin: true,
credentials: true
};
app.use(cors(corsOption));