I created some code to work with Google OAuth2 with Passport.js, but my code doesn't seem to create a session after the user had successfully authenticated .
Everything else works, just not the sessions.
My auth code:
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
const User = require("../database/models/User");
passport.serializeUser((user, done) => {
done(null, user.userID);
});
passport.deserializeUser(async (userID, done) => {
try {
const user = await User.findOne({ userID: userID });
return done(null, user);
} catch (err) {
console.log(err);
done(err, null);
}
});
passport.use(
new GoogleStrategy(
{
clientID:
"my client id",
clientSecret: "my client secret",
callbackURL: "/api/v1/auth/google/redirect",
scope: ["profile"],
},
async (accessToken, refreshToken, profile, done) => {
const { _json } = profile;
try {
const findUser = await User.findOneAndUpdate(
{ userID: _json.sub },
{
email: _json.email,
avatar: _json.picture,
username: _json.name,
},
{ new: true }
);
if (findUser) {
console.log("user has been found!");
return done(null, findUser);
} else {
const newUser = await User.create({
userID: _json.sub,
avatar: _json.picture,
username: _json.name,
email: _json.email,
});
return done(null, newUser);
}
} catch (err) {
console.log(err);
done(err, null);
}
}
)
);
and my passport and session setup:
app.use(
session({
secret: "secret",
cookie: { maxAge: 3600 * 60 * 24, domain: "lvh.me:3001" },
resave: false,
saveUninitialized: false,
store: new Store({ mongooseConnection: mongoose.connection }),
})
);
app.use(passport.initialize());
app.use(passport.session());