【问题标题】:Cannot Update Password and Put in Postman无法更新密码并放入 Postman
【发布时间】:2021-01-11 15:05:12
【问题描述】:

每当我忘记密码并发送密码重置链接时,我都会成功,这是我的代码。

router.put('/forgotpassword', async (req, res) => {
const { email } = req.body;

const errors = validationResult(req);

if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
}

try {
    let user = await User.findOne({ email });

    if (!user) {
        return res.status(400).json({
            errors: [{ msg: `User with that email doesn't exist` }],
        });
    }

    const token = jwt.sign({ _id: user._id }, resetUserPassword, {
        expiresIn: '1m',
    });

    const emailData = {
        from: emailFrom,
        to: email,
        subject: 'Password Reset Link',
        html: `
        <h1> Please Click the Link to Reset your password </h1>
        <p>${PORT}/auth/resetpassword/${token}</p>`,
    };

    return User.updateOne({ resetUserPassword: token }, (err) => {
        if (err) {
            console.log('RESET PASSWORD LINK ERROR');
            return res.status(400).json({
                err: 'Error in resetting the password',
            });
        } else {
            sgMail
                .send(emailData)
                .then((sent) => {
                    // console.log('SIGNUP EMAIL SENT', sent)
                    return res.json({
                        message: `Email has been sent to ${email}. Follow the instruction to activate your account`,
                    });
                })
                .catch((err) => {
                    // console.log('SIGNUP EMAIL SENT ERROR', err)
                    return res.json({
                        message: err.message,
                    });
                });
        }
    });
} catch (error) {
    console.error(err.message);
    res.status(500).send('Server error');
}});

我已成功通过电子邮件收到。

例如:http://本地主机:5000 / API / AUTH /重置/ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZjZkOTllZmFkNDRhZDNhMjBkMDYyNDQiLCJpYXQiOjE2MDEwMjM1NTUsImV4cCI6MTYwMTAyMzYxNX0.sZ0YEUwRDbgcw6O90QLSdguki0y6juCbXDiePWCX1hY P>

这是我在邮递员中使用的链接

但是,我担心的是我总是在邮递员中收到此错误

我知道我的错误在链接中,但我无法确定它是否起作用。因此,对于这个问题,我也无法确定密码更新是否有效。所以简而言之我有两个问题。

这是我的密码重置代码

router.put(
'/reset',
[
    check(
        'newPassword',
        'Please enter a password with 6 or more characters'
    ).isLength({ min: 6 }),
],
async (req, res) => {
    const { resetPassword, newPassword } = req.body;

    const errors = validationResult(req);

    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }

    try {
        if (resetPassword) {
            jwt.verify(resetPassword, resetUserPassword, function (err) {
                if ((err, decoded)) {
                    return res.status(400).json({
                        err: 'Expired Link. Please try again',
                    });
                }
            });
}
                User.findOne(
                    {
                        resetPassword,
                    },
                    (err, user) => {
                        if (err || !user) {
                            return res.status(400).json({
                                error: 'Something went wrong. Try later',
                            });
                        }
                    const updatedFields = {
                        password: newPassword,
                        resetPassword: '',
                    };

                    user = _.extend(User, updatedFields);

                    user.save((err, result) => {
                        if (err) {
                            return res.status(400).json({
                                error: 'Error resetting user password',
                            });
                        }
                        res.json({
                            message: `Great! Now you can login with your new password`,
                        });
                    });
                }
            );
    } catch (error) {
        console.error(err.message);
        res.status(500).send('Server error');
    }
});

我的路线

注意:auth 路由是有效的,因为我尝试使用 get - res.send('Auth Route');

这是我的用户数据库

【问题讨论】:

    标签: node.js rest express postman


    【解决方案1】:

    reset route的请求url包含一个路径参数,即/api/auth/reset之后的部分。因此,为了让 express 能够捕获此请求,您需要更改路由定义并添加路径参数:

    router.put(
    '/reset/:token',
    [
        check(
            'newPassword',
            'Please enter a password with 6 or more characters'
        ).isLength({ min: 6 }),
    ], ...
    

    【讨论】:

    • 我收到此错误 { "msg": "请输入 6 个或更多字符的密码", "param": "newPassword", "location": "body" }
    • 这是一个新问题,您可以看到路由现在被命中...您确定您的请求在请求正文中包含newPassword 的有效值吗?
    • 你不需要那个因为 user = _.extend(user, updatedFields);
    • 我不确定我是否遵循。您在代码的完全不同部分应用 _.extend,与 /reset 路由无关。此外,这个新错误与屏幕截图中显示的原始错误Cannot PUT ... 无关。此问题已解决,因此请接受此答案并发布新答案或至少编辑您的问题...
    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2022-01-22
    • 2021-11-11
    • 2017-03-03
    相关资源
    最近更新 更多