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