繁体   English   中英

PassportJS /忘记密码:req.user仅一次未定义

[英]PassportJS / Forgot password : req.user undefined only once

经过两天的谷歌搜索,我终于发布了我的第一个问题:

我尝试按照以下步骤在我的NodeJS Express网站上实现“忘记密码”功能: http : //sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/

问题是,在app.post('reset /:token')路由中,req.user是未定义的,但这是我代码中唯一未定义的地方!

我认为它可能来自“唯一链接”类型的路由,但不确定,也不知道如何解决此问题。

.ejs操作中的.ejs也要“重置/:令牌”。

这样,在输入新密码后就找不到resetPasswordToken ..

app.get('/reset/:token', function(req, res) {
    user.findOne({
        resetPasswordToken: req.params.token,
        resetPasswordExpires: {
            $gt: Date.now()
        }
    }, function(err, user) {
        if (!user) {
            req.flash('error', 'Password reset token is invalid or has expired.');
            return res.redirect('/forgot');
        }
        res.render('./pages/reset.ejs', {
            username: req.user
        });
    });
});

app.post('/reset/:token', function(req, res) {
    async.waterfall([
        function(done) {
            console.log('user: ' + req.user);
            user.findOne({
                resetPasswordToken: req.params.token,
                resetPasswordExpires: {
                    $gt: Date.now()
                }
            }, function(err, user) {
                if (!user) {
                    req.flash('error', 'Password reset token is invalid or has   expired.');
                    return res.redirect('back');
                }

                user.password = req.body.password;
                user.resetPasswordToken = undefined;
                user.resetPasswordExpires = undefined;

                user.save(function(err) {
                    req.logIn(user, function(err) {
                        done(err, user);
                    });
                });
            });
        },
        function(user, done) {
            var mailOptions = {
                to: user.email,
                from: 'passwordreset@demo.com',
                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', 'Success! Your password has been changed.');
                done(err);
            });
        }
        `enter code here`
    ], function(err) {
        res.redirect('/');
    });
});

这实际上是我在这里的第一篇文章,对于缩进不良表示抱歉..

实际上,此页面上的req.user应该为空,因为您没有通过身份验证(正在修改密码以便登录),并且req.user(护照文档)在用户通过身份验证时就包含该用户。

终于成功了,它来自reset.ejs表单操作,

这里介绍了所有内容: NodeJS无法从req.params.token获取令牌值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM