andela/team-odd-bn-backend

View on GitHub
src/middlewares/verifyToken.js

Summary

Maintainability
A
0 mins
Test Coverage
import jwt from 'jsonwebtoken';
import Response from '../helpers/Response';
import UserService from '../services/UserService';

/**
  * verify token
  * @param {object} req request object
  * @param {object} res response object
  * @param {object} next response object
  * @returns {object} data
  * next
 */
const verifyToken = (req, res, next) => {
  const token = !req.headers.token ? req.params.token : req.headers.token;
  if (!token) {
    return Response.errorMessage(req, res, 'Please, insert the token', 401);
  }
  jwt.verify(
    token, process.env.JWT_KEY,
    async (err, result) => {
      if (err) {
        return Response.errorMessage(req, res, err, 401);
      }
      const isTokenExist = await UserService.blacklistToken(token);
      if (isTokenExist) {
        return Response.errorMessage(req, res, 'You have provided an invalid token', 401);
      }
      req.user = result;
      result.token = token;
      next();
    }
  );
};

export default verifyToken;