我在网上搜索了很多,但找不到答案。
我在一个端口上使用我的前端,在另一个端口使用我的后端。我使用cors来启用请求,这是可行的。但是,当我实现护照js和与mongodb的会话不起作用时,这意味着当我尝试用req.user获取用户时,这是未定义的。这是我的index.js代码
app.use(cors());
app.use(session({
resave: false,
saveUninitialized: false,
secret: 's3cr3et',
store: new MongoStore({
url: process.env.MONGO_URI
})
}));
app.use(passport.initialize());
app.use(passport.session());
我的护照js是
在这里,我定义了我的auth,序列化和反序列化用户。我的Auth和序列化运行良好,但反序列化不是。
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, (err, user) => {
done(null, user);
});
});
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
User.findOne({ email: email.toLowerCase() }, (err, user) => {
if (err) { return done(err); }
if (!user) { return done(null, false, { error: 'Invalid credentials.' }); }
user.comparePassword(password, (err, isMatch) => {
if (err) { return done(err); }
if (isMatch) {
return done(null, user);
}
return done(null, false, { error: 'Invalid credentials.' });
});
});
}));
我也尝试过cookie会话,而不是mongo,但我想不是解决方案。问题是cors,出于某种原因,护照不看会议。
另外,我试图在coors凭据中启用并指定源文件,但是反序列化仍然没有设置用户
app.use(cors({
credentials: true,
origin: ['http://localhost:8080']
}));
我希望你能帮我,因为我不能让它工作,谢谢!
发布于 2018-07-15 20:37:42
我也有过同样的问题。在我的例子中,我在前端有一个SPA和一个RESFful (嗯,实际上不是因为我们在这里维护状态)后端在Node.js上。后来,我发现当我向我的RESTful API发出请求时,我并没有将浏览器cookie和数据一起发送。这正是问题所在,不允许用户去序列化,因为我们需要后端上的cookie数据来确定哪个用户发送了特定的请求。试着做同样的事,我希望这能解决你的问题,就像我的问题一样。:)
https://stackoverflow.com/questions/47934155
复制相似问题