I’m new to Nodejs and Express server. I’m trying to create a webapp where user can log in with their Gmail. My front-end uses Reactjs. However, I keep getting this error TypeError: Cannot set properties of undefined (setting ‘user’)
Here’s my code. I use a pretty similar approach for a simple log-in/log-out front-end without Reactjs and it works. However, I don’t know what happened with this script which keeps throwing error. Any insight would be greatly appreciate!
passport.serializeUser((user, cb) => {
process.nextTick(() => {
return cb(null, { id: user?.id, email: user?.email, googleId: user?.googleId });
});
});
passport.deserializeUser(async (user, cb) => {
process.nextTick(async () => {
try {
const dbUser = await getMemberById(user?.id);
if (dbUser) {
dbUser.email = user?.email;
dbUser.googleId = user?.googleId;
}
cb(null, dbUser);
} catch (err) {
cb(err);
}
});
});
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: 'http://localhost:3002/auth/google/callback'
}, async (token, tokenSecret, profile, done) => {
try {
console.log('Google profile:', profile);
let user = await getMemberByName(profile.id);
if (!user) {
console.log("User not found, creating new user");
user = await createMember(profile.emails[0].value, profile.id);
console.log("New user created:", user);
}
user.email = profile.emails?.[0]?.value || null; // Add email to user object if it exists
user.googleId = profile.id; // Add googleId to user object
console.log('User object before serialization:', user);
return done(null, user);
} catch (error) {
console.log("Error in authentication process:", error);
return done(error, null);
}
}));
I tried research on multiple sources but didn’t help even depreciating passportjs to previous version.
user25247436 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.