passport js 会话用户始终是同一用户

问题描述 投票:0回答:1

我正在使用快速会话通过谷歌和 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);
    });
  });
node.js express passport.js
1个回答
0
投票

我也有这个问题,已经解决了。我正在使用

req.sessionStore.sessions
但唯一正确的解决方案是不使用
req.user
。有关更多信息,请参阅 Express Passport.js:req.user 与 req.session.passport.user

© www.soinside.com 2019 - 2024. All rights reserved.