jwt-express-roles
TypeScript icon, indicating that this package has built-in type declarations

1.0.8 • Public • Published

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',
 
    // 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> 
 

Package Sidebar

Install

npm i jwt-express-roles

Weekly Downloads

0

Version

1.0.8

License

none

Unpacked Size

115 kB

Total Files

24

Last publish

Collaborators

  • ahmed_el_metwally