jwt-express-roles
npm link
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',
roles : ['user'],
};
config
const JwtExpressRoles = require('jwt-express-roles');
const jwt = new JwtExpressRoles({
roleField : 'roles',
secretKey : process.env.JWT_SECRET || 'secretKey',
expiresIn : '24h'
});
const express_user_guard = jwt.allaw_express({
roles : ['user'],
dataField : '__user__',
header_name_of_token : '__token__'
});
const socket_io_user_guard = jwt.allaw_socket_io({
roles: ['user'],
dataField : '__user__',
query_name_of_token : '__token__',
set_id_to_socket_from : '_id'
});
const express_handle_error = ( err , req , res , next ) => {
if ( err.title === 'jwt-express-roles') {
res.status(400).json({
error : err.message
});
} else {
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',
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');
app.use('/user' , express_user_guard , ( req , res ,next ) => {
const user = req['__user__'];
res.status(200).json({
user : user
});
});
app.use('/user/profile' , express_user_guard , ( req , res ,next ) => {
const user = req['__user__'];
get_profile_by_user_id( user['_id'] ).then( profile => {
res.status(200).json({
profile : profile
});
}).catch( err => {
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);
io.use( socket_io_user_guard );
io.on('connection', (socket) => {
console.log('new connection');
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 : {
__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>