首页 > 解决方案 > 如何防止第二个功能在响应发送后执行

问题描述

我正在实现一个注销功能,在其中检查我的刷新令牌是否存在于我的 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');
  }
};

标签: node.jsexpressecmascript-6redis

解决方案


推荐阅读