Я пытался заставить google oauth login system
работать на нескольких портах и обнаружил проблемы с сохранением данных (от внутреннего интерфейса к интерфейсу) при перенаправлении (большинство руководств делают это на том же порту, что меня запутало). Я понимаю, как получить данные из бэкэнда на внешнем интерфейсе (через ax ios), но я confused how to send data from backend to frontend
, поэтому я нашел этот учебник похожим на то, что я ищу. (Я попытался адаптировать это для использования google oauth вместо twitter)
Однако в этом руководстве во время перенаправления Google я получаю сообщение об ошибке:
Ошибка: не удалось сериализовать пользователя в сеанс
При поиске в Google большинство говорит, что это связано с функциями serializeUser
и deserializeUser
(которые у меня есть). Так что я очень застрял и надеюсь найти исправление.
Вот мой код:
passport.serializeUser((user, done) => {
done(null, user.id);
});
// deserialize the cookieUserId to user in the database
passport.deserializeUser((id, done) => {
User.findById(id)
.then(user => {
done(null, user);
})
.catch(e => {
done(new Error("Failed to deserialize an user"));
});
});
passport.use(
new GoogleStrategy(
{
clientID: keys.googleClientID,
clientSecret: keys.googleSecret,
callbackURL: "http://localhost:5000/auth/google/redirect"
},
(token, tokenSecret, profile, done) => {
// find current user in UserModel
console.log(profile);
const currentUser = User.findOne({
googleId: profile.id
});
// create new user if the database doesn't have this user
if (!currentUser) {
const newUser = new User({
name: profile.displayName,
screenName: profile.displayName,
googleId: profile.id,
profileImageUrl: ""
})
newUser.save()
.catch((err) => console.log(err));
if (newUser) {
done(null, newUser);
}
} else {
done(null, currentUser);
}
}
)
);
Спасибо, что прочитали это и помогли !!