【发布时间】:2018-07-31 17:13:28
【问题描述】:
我正在尝试重置用户密码,并且正在使用 passport-local-mongoose,我通过邮件为他们发送重置链接,并且还将令牌添加到链接中。链接打开,但是当用户点击重置按钮时,它会在我的命令行中引发错误 null
passortLocalMongoose = require("passport-local-mongoose")
var UserSchema = new mongoose.Schema({
email: {type: String, unique: true},
password: String,
resetPasswordToken: String,
resetpasswordExpires: Date
})
UserSchema.plugin(passortLocalMongoose);
mongoose.model("User", UserSchema )
app.post('/reset/:token', function(req, res, next) {
asynco.waterfall([
function(done) {
User.findOne({resetPasswordToken :req.params.token, resetPasswordExpires: { $gt: Date.now()}}, function(err, user) {
if(!user){
console.log(err);
req.flash('error', 'Password reset token is invalid or has expired')
return res.redirect('back')
}
if(req.body.password === req.body.confirm) {
user.setPassword(req.body.password, function(err,user){
if(err){
console.log(err)
req.flash('error', 'Sorry something went wrong')
return res.redirect('back')
} else {
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
user.save(function(err){
req.login(user, function(err){
done(err,user)
})
})
}
})
} else {
req.flash('error', 'Passwords do not match')
res.redirect('back');
}
})
}
])
})
用户点击提交按钮时出现的错误
null
如果我在 if(req.body.password == req.body.confirm) 之后调试它并输入参数,它显示两个输入为空,但我输入 req.body 它显示两个密码
【问题讨论】:
-
只需在您的`
user.setPassword(req.body.password, function(err,user){行之前添加一个debugger语句并在chrome 中打开您的url(确保您也打开了Developer Console),当它到达调试点时,在控制台窗口中,只需输入arguments并查看它返回的内容。 -
我必须安装轨迹。我使用轨迹对其进行了调试,它打印出 {'0': null, '1': null }。这意味着密码和确认为空,但这背后的原因是什么? @大卫R
-
但是如果我输入 req.body 它会注销 { password: 'bito', confirm: 'bito' } 所以 req.body 也不为空。任何帮助表示赞赏:) @DavidR
标签: node.js mongodb token passport.js