jwt-token-blacklist
Version:
A module based on jsonwebtoken package with blacklisting in redis or memory.
67 lines (53 loc) • 1.71 kB
JavaScript
;
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;