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: true // Enable notify-keyspace-events KEA
});
// Sign
r.sign('507f191e810c19729de860ea').then(token => {
r.verify(token).then(result => {
// object redis-jwt
}).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: '15m',
data: { hello: 'world' },
request: req
}).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(rjwt =>
/*
At this point you can consult the database by
the user id to save the information along with the session
*/
req.user = rjwt;
next();
}).catch(err => {
res.status(401).json({err})
})
}
}
app.listen(3000, () => console.log('Server listening on port 3000!'));
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);
});
Options
Sign
/*
Basic
*/
r.sign('507f191e810c19729de860ea').then(token => {
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
});
/*
TTL
Example: 1d, 10h, 2.5 hrs, 2h, 1m, 5s, 1y
*/
r.sign('507f191e810c19729de860ea', {
ttl: '15m'
}).then(token => {
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
});
/*
Data
Object are saved in redis-jwt
*/
r.sign('507f191e810c19729de860ea', {
data: { hello: 'world' }
}).then(token => {
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
});
/*
Request
request are saved in redis-jwt (ip,agent)
*/
r.sign('507f191e810c19729de860ea', {
request: req
}).then(token => {
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
});
/*
Example TTL + Data + Request
*/
r.sign('507f191e810c19729de860ea', {
ttl: '15m',
data: { hello: 'world' },
request: req
}).then(token => {
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
});
Verify
/*
Basic
*/
r.verify(token).then(result => {
/*
{
"rjwt": "507f191e810c19729de860ea:ZYYlwOGqTmx",
"iat": 1504334208,
"id": "507f191e810c19729de860ea",
"ttl": 60
}
*/
}).catch(err => {
// Wrong token
})
/*
with values (TTL + Data + Request)
*/
r.verify(token, true).then(result => {
/*
{
"rjwt": "507f191e810c19729de860ea:ZYYlwOGqTmx",
"iat": 1504334208,
"id": "507f191e810c19729de860ea",
"ttl": 60,
"value": {
"_key": "507f191e810c19729de860ea:ZYYlwOGqTmx",
"_agent": "Mozilla/5.0 (X11; Linux x86_64)...",
"_ip": "::1",
"hello": "world"
}
}
*/
}).catch(err => {
// Wrong token
})
Exec
// Execute Redis comands
var exec = r.exec();
exec.rawCall(['keys', `507f191e810c19729de860ea:*`], (err, result) => {
/*
[
"507f191e810c19729de860ea:ZYYlwOGqTmx",
"507f191e810c19729de860ea:d39K8J249Hd",
]
*/
});
Call
// Method's redis-jwt
var 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..
Development
Start
npm start
Serve
npm run serve
Build
npm run build
Test
npm test
License
MIT © Leonardo Rico