1.0.8 • Published 6 years ago
jwt-express-roles v1.0.8
Package Renamed From jwt_experss_roles to jwt-express-roles
To Install
npm i jwt-express-roles -S
To Run Tests
git clone git@github.com:AhmedElMetwally/jwt-express-roles.git
cd jwt-express-roles/demo
npm i
npm test
Example
user
var user = {
_id : '41sa5d15sad15sa1d5s1d',
name : 'name',
email : 'email',
anything : 'anything',
// roleField
roles : ['user'],
};
config
const JwtExpressRoles = require('jwt-express-roles');
// constructor
const jwt = new JwtExpressRoles({
// ref to { roles : ['user'] }
roleField : 'roles', // guard
secretKey : process.env.JWT_SECRET || 'secretKey',
expiresIn : '24h'
});
const express_user_guard = jwt.allaw_express({
// required
roles : ['user'], // guard
// optional
dataField : '__user__',
// default _user
// express request Function
// req['__user__']
header_name_of_token : '__token__' // default token
});
const socket_io_user_guard = jwt.allaw_socket_io({
// required
roles: ['user'], // guard
// optional
dataField : '__user__',
query_name_of_token : '__token__', // default token
set_id_to_socket_from : '_id' // default _id
});
const express_handle_error = ( err , req , res , next ) => {
if ( err.title === 'jwt-express-roles') {
// error from jwt-express-roles
res.status(400).json({
error : err.message
});
} else {
// error from express
res.status( err.status ).json({
error : err.message
});
};
};
module.exports = {
jwt ,
express_user_guard ,
socket_io_user_guard ,
express_handle_error
};
create token
const { jwt } = require('./config/jwt');
var user = {
name : 'name',
email : 'email',
// roleField
roles : ['user'],
};
jwt.create(user)
.then( token => {
console.log(token);
})
.catch( error => {
console.log( error.message );
});
middleware in expressJs
const { express_user_guard , express_handle_error } = require('./config/jwt');
// required req.headers['__token__']
app.use('/user' , express_user_guard , ( req , res ,next ) => {
const user = req['__user__'];
res.status(200).json({
user : user
});
});
// required req.headers['__token__']
app.use('/user/profile' , express_user_guard , ( req , res ,next ) => {
const user = req['__user__'];
get_profile_by_user_id( user['_id'] ).then( profile => {
// return data
res.status(200).json({
profile : profile
});
}).catch( err => {
// return err to express_handle_error
const error = {
message : err.message,
status : 401
};
next( error );
})
});
app.use( express_handle_error );
middleware in socketIo
const { socket_io_user_guard } = require('./config/jwt');
const app = require('http').createServer( handler );
const io = require('socket.io')(app);
app.listen(80);
// required socket query __token__
io.use( socket_io_user_guard );
io.on('connection', (socket) => {
console.log('new connection');
// socket['__user__']['_id'] === socket['_id'] === socket.id
console.log( { socketId : socket['_id'] });
console.log( { user : socket['__user__']});
socket.on('msg' , msg => {
socket.emit('msg' , {
user : socket['__user__'],
id : socket.id,
msg : msg
});
});
socket.on('sent_to' , (event: any) => {
io.to( event.receiver_id ).emit('sent_to' , {
from : socket.id,
message : event.message
});
});
});
socketIo index.html
<script src="/socket.io/socket.io.js"></script>
<script>
const token = 'sada4sadasdsadasas4adsad6sa6sf596f59d5f6ds54fsad';
var socket = io.connect('http://localhost:80' , {
query : {
// ref to { query_name_of_token : '__token__' }
__token__ : token
}
});
socket.on('error' , error => {
console.log({ error })
});
socket.on('msg' , msg => {
console.log({ msg })
});
socket.on('sent_to' , event => {
console.log('get message ' , {
from : event.from,
message : event.message
});
});
setTimeout(() => {
socket.emit('msg' , 'hello world');
} , 3000 );
setTimeout(() => {
socket.emit('sent_to' , {
receiver_id : 'any id user from DB',
message : 'one to one message'
});
} , 5000 );
</script>