app.post('/reset/:token', function(req, res) {
async.waterfall([
function(done) {
User.findOne({ 'local.resetPasswordToken' : req.params.token, 'local.resetPasswordExpires' : { $gt: Date.now() } }, function(err, user) {
if (!user) {
req.flash('resetMessage', req.params.token);
return res.redirect('back');
}
], function(err) {
res.redirect('/');
});
});
app.get('/reset/:token', function(req, res) {
User.findOne({ 'local.resetPasswordToken': req.params.token, 'local.resetPasswordExpires' : { $gt: Date.now() } }, function(err, user) {
if (!user) {
req.flash('forgotMessage', req.params.token );
return res.redirect('/forgot');
}
res.render('reset.ejs', { user: req.user, message: req.flash('resetMessage') });
});
});
<!--Reset.ejs page ResetPassword FORM -->
<form action="/reset/:token" method="post">
<div class="form-group">
<label>New Password</label>
<input type="text" class="form-control" name="newpassword">
</div>
<div class="form-group">
<label>Confirm Password</label>
<input type="text" class="form-control" name="confirmpassword">
</div>
<button type="submit" class="btn btn-warning btn-lg">Reset</button>
</form>
单击后我可以使用 req.params.token 获取“帖子”的令牌http://localhost:8080/reset/fed831abf73150c96f6a3e392b5cbdcaccdeb9bd
后来,当我通过reset.ejs提交“get”时,我无法使用req.params.token检索任何令牌值。
有什么办法解决吗?
我想这个的原始代码可能来自http://sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/。在本教程中,使用了 jade 模板引擎,如果您查看 reset.jade,您会发现它以
形式(方法='POST')
但没有定义任何操作。我不太了解jade,但在您的示例中您使用的是ejs,并且在您的代码中您将操作设置为
表单操作=“/重置/:令牌”方法=“发布”
正如每个人都指出的那样,您发布的路线正是 /reset/:token。所以 req.params 将是 :token 并且重置将失败。您需要做的就是发布与 get 请求中显示的 URL 完全相同的 URL。如果你读过
对 HTML 表单的操作属性使用空 URL 是一个好习惯吗? (动作=“”)
可以看到可以修改你的reset.ejs页面代码来读取
表单操作=“”方法=“帖子”
现在,帖子应该有一个等于 get url 的操作,并且令牌就位,并且应该发生重置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)