koa-jwt2
Version:
JWT authentication middleware.
64 lines (51 loc) • 1.69 kB
JavaScript
const jwt = require("jsonwebtoken");
const assert = require("assert");
const koajwt = require("../lib");
const UnauthorizedError = require("../lib/errors/UnauthorizedError");
const mockContext = require("./context");
describe("revoked jwts", function() {
const secret = "shhhhhh";
const revoked_id = "1234";
let ctx;
beforeEach(() => {
ctx = mockContext();
});
const middleware = koajwt({
secret: secret,
isRevoked: async function(ctx, payload) {
return payload.jti && payload.jti === revoked_id;
}
});
it("should throw if token is revoked", async () => {
const token = jwt.sign({ jti: revoked_id, foo: "bar" }, secret);
ctx.headers.authorization = "Bearer " + token;
try {
await middleware(ctx, () => {});
} catch (err) {
assert.ok(err);
assert.equal(err.code, "revoked_token");
assert.equal(err.message, "The token has been revoked.");
}
});
it("should work if token is not revoked", async () => {
const token = jwt.sign({ jti: "1233", foo: "bar" }, secret);
ctx.headers.authorization = "Bearer " + token;
await middleware(ctx, () => {});
assert.equal("bar", ctx.state.user.foo);
});
it("should throw if error occurs checking if token is revoked", async () => {
const token = jwt.sign({ jti: revoked_id, foo: "bar" }, secret);
ctx.headers.authorization = "Bearer " + token;
try {
await koajwt({
secret,
isRevoked: async (ctx, payload) => {
throw new Error("An error ocurred");
}
})(ctx, () => {});
} catch (err) {
assert.ok(err);
assert.equal(err.message, "An error ocurred");
}
});
});