Как правильно использовать 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));
Другие вопросы по тегам