【发布时间】: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 而不是给我用户名和消息。
【问题讨论】: