Reputation: 77
I am using express sessions to manage my users via google and Facebook login, I have setup a login where the user is logged out after clicking or after going to /logout URL but all of the sudden if i log in with two different google accounts i still see that old user maintained in req.user
and all users are loaded with the details of the same req.user
, what might have done wrong here?
Here is my config
var store = new MongoDBStore({
uri: dbUrl,
collection: "sessions",
});
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
store: store,
})
);
app.use(methodOverride());
app.use(cookieParser("some-secret-value-here"));
app.use(passport.initialize());
app.use(passport.session());
app.use(passport.authenticate("session"));
app.use(function (req, res, next) {
res.locals.session = req.user;
next();
});
Here are my auth routes
router.get("/logout", function (req, res, next) {
req.logout(function (err) {
if (err) {
return next(err);
}
res.redirect("/");
});
});
//google authentication
router.get(
"/auth/google",
passport.authenticate("google", { scope: ["email", "profile"] })
);
router.get(
"/auth/google/callback",
passport.authenticate("google", {
successRedirect: "/dashboard",
failureRedirect: "/login",
})
);
//facebook authentication
router.get(
"/login/facebook",
passport.authenticate("facebook", {
scope: ["email", "public_profile"],
})
);
router.get(
"/oauth2/redirect/facebook",
passport.authenticate("facebook", {
failureRedirect: "/login",
failureMessage: true,
}),
function (req, res) {
res.redirect("/dashboard");
}
);
Here is my passport serialize and deserialize user
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
Upvotes: 1
Views: 188
Reputation: 528
I have this problem too and I have solved it. I was using req.sessionStore.sessions
but the only right solution is to use req.user
nothing else. For more info see Express Passport.js: req.user VERSUS req.session.passport.user
Upvotes: 1