Как я могу перенаправить при входе в систему с помощью Passport и интеграции Google oauth2

#google-oauth #passport.js #next.js

#google-oauth #passport.js #next.js

Вопрос:

У меня есть следующий код, логин работает, но после выбора учетной записи Google он продолжает загружаться и не приводит к callbackURL указанному мной URL-адресу.

/pages/api/auth/google/index.js

 import nextConnect from "next-connect";
import passport from "passport";
import { Strategy as GoogleStrategy } from "passport-google-oauth20";

const authenticate = (method, options, req, res) =>
  new Promise((resolve, reject) => {
    passport.authenticate(method, options, (error, token) => {
      if (error) {
        reject(error);
      } else {
        resolve(token);
      }
    })(req, res);
  });

passport.use(
  new GoogleStrategy(
    {
      clientID: process.env.GOOGLE_CLIENT,
      clientSecret: process.env.GOOGLE_SECRET,
      callbackURL: "http://localhost:3000/api/auth/google/redirect",
      passReqToCallback: true,
    },
    (req, accessToken, refreshToken, profile, done) => {
      console.log(profile);
    }
  )
);

export default nextConnect()
  .use(passport.initialize())
  .get(async (req, res) => {
    try {
      await authenticate("google", { scope: ["profile", "email"] }, req, res);
    } catch (error) {
      console.log(error);
      res.end(JSON.stringify({ error: error.message }));
    }
  });
 

/pages/api/auth/google/redirect.js

 import nextConnect from "next-connect";
import passport from "passport";

export default nextConnect().get(
  passport.authenticate("google"),
  (req, res) => {
    res.writeHead(302, {
      Location: "/",
    });
    res.end();
  }
);
 

Ответ №1:

Попробуйте изменить свой маршрут следующим образом: если при входе в систему произошел сбой, пользователь будет перенаправлен на страницу /login, в противном случае он будет перенаправлен на домашнюю страницу /

 export default nextConnect().get(
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  }
);