【发布时间】:2018-11-12 12:09:23
【问题描述】:
此代码无效
router.put('/requestpass',function(req,res){
console.log('inside password');
async.waterfall([
function(done) {
user.findOne({
email: req.query.useremail
}).exec(function(err, user) {
if (user) {
done(err, user);
} else {
done('User not found.');
}
});
},
function(user, done) {
创建令牌
var token= user.generateJwt();
done(err, user, token);
},
// 使用新令牌和到期日期更新用户对象
function(user, token, done) {
user.findOneAndUpdate({ email : req.query.useremail }, { token: token, reset_password_expires: Date.now() + 86400000 }, { upsert: true, new: true }).exec(function(err, new_user) {
if(err){console.log('error hain')}
done(err, token, new_user);
});
},
//配置邮箱
function(token, user, done) {
ejs.renderFile(__dirname + "../templates/url.ejs", { url: 'http://localhost:3000/auth/reset_password?token=' + token }, function (err, data) {
if (err) {
console.log(err);
} else {
var mainOptions = {
from: 'kapilutkarsh1@gmail.com',
to: "kapilutkarsh1@gmail.com",
subject: 'Password Reset',
html: data
};
console.log("html data >", mainOptions.html);
transporter.sendMail(mainOptions, function (err, info) {
if (err) {
console.log(err);
} else {
console.log('Message sent: ' + info.response);
}
});
}
});
}
], function(err) {
return res.status(422).json({ message: err });
});
});
我已经制作了这个功能,它将向用户发送重置密码链接,但它不起作用,它在 user.findOneandupdate 上显示错误,然后在下面的电子邮件配置中是函数生成令牌
userSchema.methods.generateJwt = function() {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);
return jwt.sign({
_id: this._id,
email: this.email,
name: this.name,
exp: parseInt(expiry.getTime() / 1000),
}, "MY_SECRET"); //
};
that's how I have configured email
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '**',
pass: '****'
}
});
【问题讨论】:
-
邮件发送成功只是告诉我为什么 user.findOneAndUpdate({ email : req.query.useremail }, { token: token, reset_password_expires: Date.now() + 86400000 }, { upsert: true , 新的: 真 }).exec(function(err, new_user) { if(err){console.log('error hain')} done(err, token, new_user); });没有添加两个属性 token 和 resetpassword expires
-
如果这个问题得到解决,请在下面的答案框中发布答案,而不是作为评论或问题/标题更新。谢谢!