【发布时间】:2018-06-04 16:09:58
【问题描述】:
我在互联网上搜索了很多,但我找不到答案。
我在一个端口上使用我的前端,在另一个端口上使用我的后端。我使用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 和序列化运行良好 但反序列化不行
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 session 而不是 mongo db,但我想这不是解决方案。问题是cors,由于某种原因护照不阅读会话。
我也尝试在 coors 中启用凭据并指定来源,但反序列化仍然没有设置用户
app.use(cors({
credentials: true,
origin: ['http://localhost:8080']
}));
我希望你能帮助我,因为我无法让它工作谢谢!
【问题讨论】:
-
删除 cors() 后是否有效?我有同样的情况和同样的问题:(
-
@UtkarshPramodGupta 如果您删除了 cors,它将无法正常工作,因为您还会禁用跨域请求。所以前端将无法发出任何请求。虽然,我遇到了同样的问题并搜索了整个互联网。还是找不到办法。我正在寻找其他身份验证方式,因为 passportjs 似乎不适用于 cors,或者我只是做错了。
标签: javascript session authentication cors passport.js