如何修复Mongoose+Passport注册时Path `password` is required报错
问题原因
passport-local-mongoose 插件会自动为用户模型添加username、hash、salt字段和对应的身份验证方法,不会使用你手动在Schema中定义的password字段。你给password字段加了required: true的必填校验,但注册流程中该字段始终不会被赋值,因此触发了校验错误。
解决方法
- 第一步:删除UserSchema中手动定义的
password字段,无需手动声明密码相关字段,插件会自动处理加密存储逻辑,修改后的Schema如下:
const UserSchema = new mongoose.Schema({ // 如有其他自定义字段,比如邮箱、昵称可以在这里添加,不需要保留password字段 })
- 第二步(可选优化):如果需要对密码做长度、格式校验,不要在Schema层面添加,在注册接口接收参数时做前置校验即可,示例如下:
app.post("/register", (req,res) =>{ // 前置参数校验 if(!req.body.password || req.body.password.length < 6) { console.log("密码长度不能少于6位") return res.redirect("/register") } User.register({username:req.body.Username},req.body.password, function(err, user){ if (err) { console.log(err) res.redirect("/register") } else{ passport.authenticate("local")(req,res, function(){ res.redirect("/index") }) } }) })
- 第三步:检查前端注册表单的密码输入框
name属性是否为password,确保参数可以正常传递到后端。
修改完成后清空数据库中已有的用户集合,重启服务再测试注册功能即可。
内容的提问来源于stack exchange,提问作者Nache Masho Ado
相关产品推荐
相关产品推荐

