UNPKG

jwt-token-blacklist

Version:

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

51 lines (41 loc) 1.49 kB
"use strict"; 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;