无法访问Mongoose查询返回的用户password属性问题求助
问题解决:无法访问用户对象的password属性
核心问题出在Mongoose查询方法的使用上:
User.find({email})返回的是匹配用户的数组,而非单个用户对象,所以你访问user.password时,本质是在数组上找password属性,自然返回undefined,同时数组也没有correctPassword方法。
修复步骤
- 替换查询方法:将
find改为findOne,这样会返回单个匹配的用户对象(无匹配则返回null):
const user = await User.findOne({email}).select('+password')
- 调整用户存在性判断:因为
findOne返回null表示无匹配用户,原判断逻辑可以保留,但注意错误信息可以更精准(把"and"改成"or",避免误导):
if(!user || !(await user.correctPassword(password, user.password))){ return next(new AppError('Incorrect email or password', 401)) }
- 验证JWT生成逻辑:确保
SignToken函数能正确处理user._id(Mongoose的ObjectId可以直接传入,多数JWT库会自动处理为字符串)。
额外提示
如果你的User模型中设置了password字段的select: false,那么select('+password')是正确的,它会强制返回这个原本被隐藏的字段,这部分不需要修改。
内容的提问来源于stack exchange,提问作者Meherab Hassan
相关产品推荐
相关产品推荐

