#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('/');
}
);