Package Exports
- redis-jwt
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (redis-jwt) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
redis-jwt
Management of sessions by Redis and JWT for horizontal scalability, with the possibility of having one session at a time or multiple for the same user
Requirements
Installation
Npm
npm install redis-jwt --save
Yarn
yarn add redis-jwt
Usage
import RedisJwt from 'redis-jwt';
const r = new RedisJwt({
//host: '/tmp/redis.sock', //unix domain
host: '127.0.0.1', //can be IP or hostname
port: 6379, // port
maxretries: 10, //reconnect retries, default 10
//auth: '123', //optional password, if needed
db: 0, //optional db selection
secret: 'secret_key', // secret key for Tokens!
multiple: false, // single or multiple sessions by user
kea: false // Enable notify-keyspace-events KEA
});
r.sign('507f191e810c19729de860ea').then(token => {
r.verify(token).then(decode => {
// [Object]
}).catch(err => {
// Wrong token
});
});
Example Redis-jwt with Express
import RedisJwt from 'redis-jwt';
import express from 'express';
const r = new RedisJwt();
const app = express();
// Login
app.get('/login', (req, res) => {
r.sign('507f191e810c19729de860ea', {
ttl: '15 minutes',
dataToken: { // Public
hello: 'world'
},
dataSession: { // Private
hello: 'world',
headers : req.headers
}
}
}).then(token => {
res.json({token});
});
});
// Me
app.get('/me', mw(), (req, res) => {
res.json(req.user);
});
// Middleware
function mw() {
return (req, res, next) => {
const token = req.headers['authorization'];
r.verify(token).then(decode =>
// here you can get user from DB by id (decode.id)
req.user = decode;
next();
}).catch(err => {
res.status(401).json({err})
})
}
}
app.listen(3000, () => console.log('Server listening on port 3000!'));
Options
Sign
// Basic
r.sign('507f191e810c19729de860ea').then..
// TTL : 50 seconds, 10 minutes, 5 hours, 3 days, 1 year ...
r.sign('507f191e810c19729de860ea', {
ttl: '15 minutes'
}).then...
// Save data in token : Object are saved in token
r.sign('507f191e810c19729de860ea', {
dataToken: {world: 'hello'}
}).then...
// Save data in redis : Object are saved in redis-jwt
r.sign('507f191e810c19729de860ea', {
dataSession: {hello: 'world'}
}).then...
// Example TTL + dataToken + dataSession
r.sign('507f191e810c19729de860ea', {
ttl: '15 minutes',
dataToken: {world: 'hello'},
dataSession: {hello: 'world'}
}).then...
Verify
// Basic
r.verify(token).then(decode => {
/*
{
"rjwt": "507f191e810c19729de860ea:ZYYlwOGqTmx",
"dataToken": [Object]
"iat": 1504334208,
"id": "507f191e810c19729de860ea",
"ttl": 60
}
*/
}).catch(err => {
// Wrong token
})
// Get data from redis
r.verify(token, true).then(decode => {
/*
{
"rjwt": "507f191e810c19729de860ea:ZYYlwOGqTmx",
"dataToken": [Object]
"dataSession": [Object] ----> get data session
"iat": 1504334208,
"id": "507f191e810c19729de860ea",
"ttl": 60
}
*/
}).catch(err => {
// Wrong token
})
Exec
// Execute Redis comands
const exec = r.exec();
exec.rawCall(['keys', `507f191e810c19729de860ea:*`], (err, result) => {
/*
[
"507f191e810c19729de860ea:ZYYlwOGqTmx",
"507f191e810c19729de860ea:d39K8J249Hd",
]
*/
});
Call
// Method's redis-jwt
const call = r.call();
// Test Ping
call.ping().then..
// Create
call.create(key, value, ttl).then..
// exits by key
call.exists(key).then..
// Get ttl by Key
call.ttl(key).then..
// Get values by key
call.getValueByKey(key).then..
// Get values by Pattern
call.getValuesByPattern(pattern).then..
// Get count by Pattern
call.getCountByPattern(pattern).then..
// Get info
call.getInfo(section).then..
// Destroy by key
call.destroy(key).then..
// Destroy multiple by key
call.destroyMultiple(key).then..
Events
// Ready
r.on('ready', () => {
console.log('redis-jwt-> ready!');
});
// connected
r.on('connected', () => {
console.log('redis-jwt-> connected!');
});
// disconnected
r.on('disconnected', () => {
console.log('redis-jwt-> disconnected!');
});
// error
r.on('error', (err) => {
console.log('redis-jwt-> error!', err);
});
Development
Start
npm start
Compile
npm run compile
Test
npm test
License
MIT © Leonardo Rico