热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在打开电子邮件链接以使用令牌重设密码时呈现毛刺

我正在尝试添加用于重置密码的功能。我用过节点表示。整个应用程序成功运行

我正在尝试添加用于重置密码的功能。我用过节点表示。整个应用程序成功运行,并且该应用程序向用户发送了一封电子邮件,其中包含使用令牌进行重置的链接。
但在点击链接后,它将呈现到一个页面
无法获取/ users / reset / 298abdf3ad051aea59c1527e6517376c2a4ecc7f
我已经正确地路由了所有路由,并在必要时提到了每条路由,而且我确信没有拼写错误,有人可以帮助我找出错误

这是我的user.js文件,其中包含忘记密码功能


router.get('/forgot',(req,res) => res.render('forgot'));
router.post('/forgot',function(req,res,next) {
async.waterfall([
function(done) {
crypto.randomBytes(20,function(err,buf) {
var token = buf.toString('hex');
done(err,token);
});
},function(token,done) {
User.findOne({ email: req.body.email },user) {
if (!user) {
req.flash('error_msg','No account with that email address exists');
return res.redirect('/users/forgot');
}
user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
user.save(function(err) {
done(err,token,user);
});
});
},user,done) {
var smtpTransport = nodemailer.createTransport({
service: 'Gmail',auth: {
user: process.env.EMAIL,pass: process.env.PASSWORD
}
});
var mailOptiOns= {
to: user.email,from: process.env.EMAIL,subject: 'Node.js Password Reset',text: 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' +
'Please click on the following link,or paste this into your browser to complete the process:\n\n' +
'http://' + req.headers.host + '/users/reset/' + token + '\n\n' +
'If you did not request this,please ignore this email and your password will remain unchanged.\n'
};
smtpTransport.sendMail(mailOptions,function(err) {
console.log('mail sent');
req.flash('success_msg','An e-mail has been sent to ' + user.email + ' with further instructions.');
done(err,'done');
});
}
],function(err) {
if (err) return next(err);
res.redirect('/users/forgot');
});
});
router.get('/users/reset/:token',res) {
User.findOne({ resetPasswordToken: req.params.token,resetPasswordExpires: { $gt: Date.now() } },user) {
if (!user) {
req.flash('error','Password reset token is invalid or has expired.');
return res.redirect('/users/forgot');
}
res.render('/users/reset',{token: req.params.token});
});
});
router.post('/users/reset/:token',res) {
async.waterfall([
function(done) {
User.findOne({ resetPasswordToken: req.params.token,user) {
if (!user) {
req.flash('error_msg','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.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
user.save(function(err) {
req.logIn(user,function(err) {
done(err,user);
});
});
})
} else {
req.flash("error_msg","Passwords do not match.");
return res.redirect('back');
}
});
},function(user,done) {
var smtpTransport = nodemailer.createTransport({
service: 'mail',auth: {
user: process.env.EMAIL,pass: process.env.PASSWORD
}
});
var mailOptiOns= {
to: user.email,subject: 'Your password has been changed',text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
};
smtpTransport.sendMail(mailOptions,function(err) {
req.flash('success_msg','Success! Your password has been changed.');
done(err);
});
}
],function(err) {
res.redirect('/users/login');
});
});


这是我的重置页面




" method="POST">

Reset Password


<%-include('./partials/messages.ejs');-%>


type="password"
id="password"
name="password"
class="form-control"
placeholder="New Password"
/>



type="password"
id="confirm password"
name="confirm password2"
class="confirm form-control"
placeholder="Confirm Password"
/>








请帮助!
预先感谢!





推荐阅读
author-avatar
MiltonW_825
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有