我试着把登录页面和mongoose连接起来。不幸的是它不起作用。我得到错误:
ObjectParameterError: Parameter "filter" to findOne() must be an object, got 637798b57bfa9d5fbede9c30
我试图找到解决方案的一整天,但我可以t figure it out. I
m也仍然学习编码和斗争,以了解它的一切,但大多数我明白。
第一个
我认为问题就出在这里的某个地方:
passport.use(new LocalStrategy({ usernameField: 'email' }, authenticateUser))
passport.serializeUser((User, done) => done(null, User._id))
passport.deserializeUser(function(_id, done) {
User.findOne(_id, function (err, User) {
done(err, User);
});
});
但我不确定...
非常感谢你的帮助。
1条答案
按热度按时间2uluyalo1#
您正在混合使用findOne和findById
findById
不需要对象而是_id
.正如docs(还有方法名)解释的那样,在钩子下它通过id找到,所以就像做findOne({_id: id})
一样。从文档中:
findById(id)
几乎 * 等价于findOne({ _id: id })
因此,问题在于,当方法期望对象与过滤器匹配时,您试图简单地使用
_id
。因此,您可以使用
User.findOne({_id: _id})
或User.findById(_id)