我花了几个小时弄清楚为什么当 Passport.js 序列化用户时我无法获得 req.user 的值。但神奇的是,当我删除保存会话的数据库集合时,它又工作了。
我的堆栈:
- Vue.js
- 表达
- Mongoose MongoDb(我将数据存储在 Atlas 上)
- 节点.js
我使用express-session
andconnect-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
现在它可以工作了,因为我已经删除了sessions
MongoDb Atlas 上的数据库集合。
我只是想知道为什么会这样?以后还会重蹈覆辙吗?