我在互联网上搜索了很多,但我找不到答案。
我在一个端口使用我的前端而在另一个端口使用我的后端。我使用cors来启用请求,这是有效的。但是当我实施护照js时 并且与mongodb whit的会话不起作用,这意味着当我尝试使用 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 db,但我想这不是解决方案。问题是因为某些原因护照不读会议。
此外,我尝试启用coors凭据并指定原点但反序列化仍未设置用户
app.use(cors({
credentials: true,
origin: ['http://localhost:8080']
}));
我希望你能帮助我,因为我无法让它工作谢谢!!
答案 0 :(得分:2)
我有同样的问题。以我为例,我在前端有一个SPA,在Node.js上有一个RESFful(嗯,实际上不是因为我们在这里保持状态)后端。后来我发现,当我向RESTful API发出请求时,没有将浏览器Cookie和数据一起发送。这正是问题所在所在,这是不允许用户进行反序列化的原因,因为我们需要后端的cookie数据来找出哪个用户发送了特定请求。尝试做同样的事情,希望能解决您的问题。 :)