javascript Node express Json Web令牌-如何处理无效令牌

hlswsv35  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(126)
const token = req.headers[process.env.AUTH_KEY_NAME];
    if (!token) return res.send("No token provided").status(401);

    try {
      const user = jwt.verify(token, process.env.JWT_KEY);
      return res.status(200).json(user);
    } catch (e) {
      return res.send(e).status(401);
    }
  },

这是我用来处理令牌验证的代码。有3种可能性:未提供标记、提供了错误标记、提供了正确标记。在应该正确调用所有内容时调用所有内容,但在标记不正确时,我在控制台“JsonWebTokenError:无效令牌“,这是正确的,但它也崩溃的应用程序。我如何防止崩溃?这里是其他代码,我发现也崩溃的应用程序与无效令牌

const user = jwt.verify(token, process.env.JWT_KEY, (err, payload) => {
      if (err) {
        return res.send(err).status(401);
      }
    });
    return res.status(200).json(user);
eaf3rand

eaf3rand1#

我使用中间件(auth.middleware.ts)进行令牌验证,如下所示。

// auth.middleware.ts
import jwt from 'jsonwebtoken';

export default function (req, res, next) {
  try {
    const token = req.headers.authorization.split(' ')[1];
    const decodedToken = jwt.verify(token, process.env.JWT_SECRET);
    // add userData object to request
    req.userData = {
      email: decodedToken.email,
      userId: decodedToken.userId,
      username: decodedToken.username,
      role: decodedToken.role,
    };
    next();
  } catch (error) {
    return res.status(401).json({
      message: 'not authenticated',
    });
  }
}

然后我在我的路由中这样使用中间件功能。

// cycle.routes.ts
import express from 'express';
import authMiddleware from '../middleware/auth.middleware';
import CycleController from './cycle.controller';

class CycleRoutes {
  router = express.Router();
  cycleController = CycleController;

  constructor() {
    this.configureRoutes();
  }

  configureRoutes() {
    this.router.post('/cycle/start', authMiddleware, this.cycleController.start);
  }
}

export default new CycleRoutes().router;

作为参考,我会链接你一个repo,你可以检查我如何实现这个中间件,因为看到示例代码帮助我学习新东西很多。
https://gitlab.com/fiehra/sumaho

fnx2tebb

fnx2tebb2#

使用回调函数可防止应用程序崩溃。

var tokenData;
jwt.verify(token, process.env.JWT_KEY, (err, data) => {
  data && (tokenData = data);
});
if (!tokenData) {
  throw new Error("==> Token expired");
}

我想这会有用的。

相关问题