API 调用受到另一个 API 调用验证的影响



我真的不确定我的标题是否正确,但我的问题是我的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('/');
}
};

当我注释掉get-specificuserapi时,重置密码令牌检查就起作用了。如果我删除validateToken,它将返回null,而不是给我用户名和消息。

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

将您的代码更改为:

//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);
});

最新更新