【问题标题】:api call getting affected by another api call's validationapi 调用受到另一个 api 调用验证的影响
【发布时间】:2021-06-24 10:15:16
【问题描述】:

不太确定我的标题是否正确,但我的问题是我的 api 中有这个重置密码令牌检查器,它似乎受到另一个找到特定用户的 api 的影响,这个 api 有用户验证。

这是他们的样子:

//get specific user
router.get('/:id', validateToken, async (req, res) => {
    const id = req.params.id
    const user = await User.findByPk(id);
    res.json(user);
});

//reset-password token check
router.get('/reset-pass', async (req, res) => {
    await User.findOne({
        where: {
            resetPasswordToken: req.body.resetPasswordToken,
            resetPasswordExpires: {
                [Op.gt]: Date.now()
            }
        }
    }).then(user => {
        if(!user) {
            res.status(401).json({ error: 'Password reset link is invalid or has expired.'})
        } else {
            res.status(200).send({
                username: user.username,
                message: 'Password reset link Ok!'
            });
        }
    });
});

那么这里是 validateToken

const validateToken = (req, res, next) => {
    const accessToken = req.cookies['access-token'];

    if (!accessToken) 
        return res.status(401).json({error: 'User not authenticated!'});

    try {
         const validToken = verify(accessToken, JWT_SECRET)
         req.user = validToken;
         if(validToken) {
            req.authenticated = true;
            return next();
         }
    } catch(err) {
        res.clearCookie('access-token')
        return res.status(400).json({error: err}).redirect('/');
    }
};

当我注释掉获取特定用户 api 时,重置密码令牌检查有效。如果我删除 validateToken 它会返回 null 而不是给我用户名和消息。

【问题讨论】:

    标签: node.js api express


    【解决方案1】:

    我注意到的一件事是路由参数“/:id”,这意味着从字面上看,一切都将由特定用户处理,因为所有路由都以“/”开头,只使用参数在前缀为“/user/:id”的路由中,只有以“/user”开头的路由才会执行该代码。

    将您的代码更改为:

    //get specific user
    router.get('/user/:id', validateToken, async (req, res) => {
        const id = req.params.id
        const user = await User.findByPk(id);
        res.json(user);
    });
    

    【讨论】:

    • 这行得通,哈哈!我的坏我没有注意到这个错误!发布后我再次查看我的代码时,我也看到了这个问题!无论如何,这是正确的答案!它认为“reset-pass”是一个 id 哈哈!
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多