jwt-token-blacklist
Version:
A module based on jsonwebtoken package with blacklisting in redis or memory.
51 lines (41 loc) • 1.49 kB
JavaScript
;
var jwt = require("jsonwebtoken");
var _ = require("lodash");
var redis = require("redis");
var promisify = require("util").promisify;
var createRedisFilter = function createRedisFilter(config) {
var client = {};
if (_.get(config, "store.client")) {
client = _.get(config, "store.client");
} else {
return new Error("Redis client instance required");
}
var setAsync = promisify(client.set).bind(client);
var getAsync = promisify(client.get).bind(client);
var filter = {};
filter.add = function (token) {
if (!_.size(token)) {
return Promise.reject("No token");
}
var decoded = jwt.decode(token);
if (_.isNil(decoded.exp) || decoded.exp <= Math.floor(Date.now() / 1000)) {
return Promise.reject("Expire time is missing or expired");
}
return setAsync(token, token, "EX", Math.floor(decoded.exp - Date.now() / 1000));
};
filter.check = function (token) {
return new Promise(function (resolve, reject) {
getAsync(token).then(function (checkRes) {
if (_.size(checkRes) && checkRes == token) {
reject("Token blacklisted!");
} else {
resolve("Token ok");
}
}).catch(function (checkErr) {
return reject(checkErr);
});
});
};
return filter;
};
module.exports = createRedisFilter;