1

我花了几个小时弄清楚为什么当 Passport.js 序列化用户时我无法获得 req.user 的值。但神奇的是,当我删除保存会话的数据库集合时,它又工作了。

我的堆栈:

  • Vue.js
  • 表达
  • Mongoose MongoDb(我将数据存储在 Atlas 上)
  • 节点.js

我使用express-sessionandconnect-mongo来创建和保存会话数据,并使用 Passport.js 使用它来序列化和反序列化用户

应用程序.js:

const session = require("express-session");
const passport = require("passport");
const MongoStore = require("connect-mongo")(session);

// Sessions
app.use(
  session({
    secret: "this is a sample secret",
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
  })
);

//Passport Middleware
app.use(passport.initialize());
app.use(passport.session());

然后我调用req.user这样的路线:

router.get("/users", async (req, res) => {
  try {
    if (req.user) {
      res.send(req.user)
    } else {
      res.send("no-user-found",)
    }
  } catch (err) {
    console.error(err);
  }
});

我正在/api/users使用托管在 localhost 端口 8080 上的 Vue.js 和 Axios 调用前端。另外,通过调用在服务器本身上进行测试http://localhost:3000/api/users

现在它可以工作了,因为我已经删除sessionsMongoDb Atlas 上的数据库集合。

我只是想知道为什么会这样?以后还会重蹈覆辙吗?

4

0 回答 0