I'm working on implementing Google Authentication for my website, but encountering the following error related to session management.
TypeError: req.session.regenerate is not a function at SessionManager.logIn (C:\Users\Jayas\node_modules\passport\lib\sessionmanager.js:28:15) at req.login.req.logIn (C:\Users\Jayas\node_modules\passport\lib\http\request.js:39:26) at strategy.success (C:\Users\Jayas\node_modules\passport\lib\middleware\authenticate.js:256:13) at verified (C:\Users\Jayas\node_modules\passport-oauth2\lib\strategy.js:189:20) at Strategy._verify (file:///C:/Users/Jayas/LanguageConnect/languageconnect/server.mjs:91:7) at C:\Users\Jayas\node_modules\passport-oauth2\lib\strategy.js:205:24 at C:\Users\Jayas\node_modules\passport-google-oauth20\lib\strategy.js:122:5 at passBackControl (C:\Users\Jayas\node_modules\oauth\lib\oauth2.js:134:9) at IncomingMessage.<anonymous> (C:\Users\Jayas\node_modules\oauth\lib\oauth2.js:157:7) at IncomingMessage.emit (node:events:525:35)
This is my code,
import passport from "passport";
import GoogleStrategy from "passport-google-oauth20";
import cookieSession from "cookie-session";
const app = express();
const PORT = 8000;
app.use(
cookieSession({ name: "Session", keys: ["lama"], maxAge: 24 * 60 * 60 * 100 })
);
app.use(passport.initialize());
app.use(passport.session());
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
app.get("/auth", passport.authenticate("google", { scope: ["profile"] }));
app.get(
"/google/auth/callback",
passport.authenticate("google", {
successRedirect: "http://localhost:3000/home",
failureRedirect: "/",
}),
function (req, res) {
console.log("object");
}
);
passport.use(
new GoogleStrategy(
{
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: "http://localhost:8000/google/auth/callback",
},
function (accessToken, refreshToken, profile, done) {
done(null, profile);
}
)
);
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
I had tried GoogleLogin too, but says it is no longer supported. Would appreciate any help, Thanks!
The error message you're seeing is because you're using cookie-session middleware, but passport expects a session to be managed by express-session. You're trying to use a method (req.session.regenerate)
that's only available with express-session.
Replace cookie-session with express-session and it should resolve your issue.
import session from 'express-session';
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: false
}));