我正在使用快速会话通过谷歌和 Facebook 登录管理我的用户,我设置了一个登录,用户在单击或转到 /logout URL 后注销,但如果我使用两个不同的谷歌帐户登录,突然之间我仍然看到老用户在
req.user
中维护,并且所有用户都加载了相同 req.user
的详细信息,这里可能做错了什么?
这是我的配置
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();
});
这是我的身份验证路线
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");
}
);
这是我的护照序列化和反序列化用户
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
我也有这个问题,已经解决了。我正在使用
req.sessionStore.sessions
但唯一正确的解决方案是不使用 req.user
。有关更多信息,请参阅 Express Passport.js:req.user 与 req.session.passport.user