node.js - 如何防止第二个功能在响应发送后执行
问题描述
我正在实现一个注销功能,在其中检查我的刷新令牌是否存在于我的 redis 缓存中,如果它不存在,则响应应返回为 401 Not Authorized 并且不应执行其余代码。
目前正在发送正确的响应,但后续代码和函数(包括从 redis 函数中删除刷新令牌)仍在执行中。我怎样才能防止这种情况?
const logout = async (req, res) => {
const refToken = req.body.refreshToken;
try {
const payload = jwt.verify(refToken, process.env.REFRESH_TOKEN_SECRET);
req.user = payload.user;
// Verify that the token matches the token in redis
const getResult = redis.GET(req.user, (err, result) => {
if (err) {
console.error(err.message);
return res.status(500).send('Server Error');
}
if (refToken !== result) {
return res.status(401).send('Not Authorized');
}
console.log(result);
return result;
});
const deleted = await redis.DEL(req.user, (err, result) => {
console.log('executed');
if (err) {
console.error(err.message);
return res.status(500).send('Server Error');
}
return result;
});
if (deleted === 1) {
return res.status(401).json('User has been logged out');
}
} catch (err) {
console.error(err.message);
if (err.message === 'jwt expired') {
return res.status(401).json({ error: 'Token expired' });
}
return res.status(500).send('Server Error');
}
};
解决方案
推荐阅读
- applescript-objc - How to perform a subroutine every 5 seconds?
- split - pytorch split 给出错误的答案
- swift - 在 Vapor 中可以根据哪个字段进行过滤?
- flutter - How to change a bottom navigation bar icon in the setState() function in flutter?
- java - 在 Android Studio 中使用 Clipdrawable 时提高动画速度?
- google-compute-engine - Google Compute Engine How to bind new external IP address to the instance
- python-3.x - How to efficiently create an indexed list in python?
- android - 程序类型已经存在 androidx.exifinterface.R
- java - Is there a way to use overridden function in base class? (In Java)
- bash - Dockerfile - escaping env variable passed to a 'RUN' command