UNPKG

jwt-token-blacklist

Version:

A module based on jsonwebtoken package with blacklisting in redis or memory.

67 lines (53 loc) 1.71 kB
"use strict"; var createRedisFiler = require("./redis"); var createMemoryFilter = require("./memory"); var _ = require("lodash"); var ms = require("ms"); var util = require("util"); var jwtBlacklist = function jwtBlacklist(jwt, config) { if (!_.isObject(jwt)) { throw new Error("jwt should be an object"); } var defaultConfig = { store: { type: "memory" } }; config = config || defaultConfig; if (config.store.type == "redis") { jwt.filter = createRedisFiler(config); } else { jwt.filter = createMemoryFilter(config); } var jwtVerifyOrigin = jwt.verify; var verify = function verify(token, secretOrPublicKey, options, callback) { jwtVerifyOrigin(token, secretOrPublicKey, options, function (err, decode) { if (err) { return callback(err); } jwt.filter.check(token, function (err, checkResult) { if (err) { return callback(err); } return callback(null, decode); }); }); }; jwt.verify = function (token, secretOrPublicKey, options, callback) { if (_.isFunction(options)) { callback = options; options = {}; } else { options = options || {}; } if (_.isFunction(callback)) { return verify(token, secretOrPublicKey, options, callback); } return util.promisify(verify)(token, secretOrPublicKey, options); }; jwt.blacklist = function (token) { return util.promisify(jwt.filter.add)(token); }; return jwt; }; module.exports = jwtBlacklist;