Tuesday, 14 March 2017

json web token not being verified

I'm building a new app at the moment trying to use tdd techniques atm and i I dont understand why my json web token is not getting verified. It keeps throwing a malformed token error. At the moment I'm setting json web-token secret as an env environemnt. Could someone take a look at it? This is my middleware.

import jwt from "jsonwebtoken";

export default function(req,res,next){
  const authorizationHeaders = req.headers["authorization"];
  let token;

  if(authorizationHeaders){
    token = authorizationHeaders.split(" ")[1];
  }

  if(token){
    jwt.verify(token, process.env.JWT, (err, decodedToken) => {
      if(err){
        console.log(err);
        res.status(401).json({
          message: "invalid token provided"
        });
      } else {
        res.user = decodedToken;
        next();
      }
    });
  } else {
    res.status(401).json({
      success: false,
      message: "no token provided"
    });
  }
}

Here are my tests.

import authenticateJwt from "../src/middleware/authenticateJwt";
import httpMocks from "node-mocks-http";
import jwt from "jsonwebtoken";
import { expect } from "chai";

describe("Express Middleware: authenticateJwt", () =>{
  const response = httpMocks.createResponse();
  let nextCalled = false;
  let next = function(){ nextCalled = true; };

  it("should not call next when no token is provided",()=>{
    let request = httpMocks.createRequest();
    authenticateJwt(request, response, next);
    expect(nextCalled).to.equal(false);
  });

  it("should not call next when token provided is invalid", () => {
    let request = httpMocks.createRequest({
      headers: {
        Authorization: "Bearer gibberish"
      }
    });
    authenticateJwt(request, response, next);
    expect(nextCalled).to.equal(false);
  });

  it("should call next when the token provided is valid", () => {
    let token = jwt.sign({}, process.env.JWT);
    let request = httpMocks.createRequest({
      headers: {
        Authorization: `Bearer ${token}`
      }
    });
    authenticateJwt(request, response, next);
    expect(nextCalled).to.equal(true);
  });
});

Here is the error it keeps throwing out

{ Error
    at Object.module.exports [as verify] (/home/natealcedo/Projects/learnTesting/node_modules/jsonwebtoken/verify.js:54:17)
    at exports.default (/home/natealcedo/Projects/learnTesting/src/middleware/authenticateJwt.js:12:12)
    at Context.<anonymous> (/home/natealcedo/Projects/learnTesting/test/jwtMiddleware.test.js:23:5)
    at callFn (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runnable.js:345:21)
    at Test.Runnable.run (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runnable.js:337:7)
    at Runner.runTest (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:444:10)
    at /home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:550:12
    at next (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:361:14)
    at /home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:371:7
    at next (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:295:14)
    at Immediate.<anonymous> (/home/natealcedo/Projects/learnTesting/node_modules/mocha/lib/runner.js:339:5)
    at runCallback (timers.js:651:20)
    at tryOnImmediate (timers.js:624:5)
    at processImmediate [as _immediateCallback] (timers.js:596:5) name: 'JsonWebTokenError', message: 'jwt malformed' }



via Nate

No comments:

Post a Comment