Make sure you have used async and await when getting user data.
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
const USER = await User.findById(id);
done(null, USER);
});
passport.use(
new GoogleStrategy(
{
// options for google strategy
clientID: keys.google.clientID,
clientSecret: keys.google.clientSecret,
callbackURL: "/auth/google/redirect",
},
async (accessToken, refreshToken, profile, done) => {
// passport callback function
// check if user already exist in our db
const oldUser = await User.findOne({ googleId: profile.id });
if (oldUser) {
return done(null, oldUser);
} else {
const newUser = await new User({
username: profile.displayName,
googleId: profile.id,
}).save();
return done(null, newUser);
}
}
)
);