Giter VIP home page Giter VIP logo

jwt-guard's Introduction

jwt-guard

Provides Express middleware for guarding resources based on JWT roles and claims. Supports chaining with and/or.

Works great with Auth0 or other JWT implementations.

app.get('/user/:id', function (req, res) {
    req.token.require
        .role('admin')
        .or.claim('user_id', req.params.id)
        .guard()    

    res.send('You are allowed to access this user!')
})

Installation

npm install jwt-guard

Include the Express middleware as early as possible. It validates and decodes the JWT from the Authorization: Bearer header using jsonwebtoken.

import express from 'express'
import jwtGuard from 'jwt-guard'

const app = express()

app.use(jwtGuard('secret_key_shhhhh'))

Usage

.token is added to every request object. This can be used to guard access by requiring roles and/or claims.

Guard

Guarding throws an HTTP error on failure.

Using roles

Roles come from the roles: claim in the JWT.

app.get('/admin-area', function (req, res) {
    req.token.require.role('admin').guard()
    
    res.send('Welcome to the secret area')
})

Using claims

Claims come from the payload of the JWT. Often this is used to hold things like user_id.

app.post('/user', function (req, res) {
    const userId = req.body.user_id

    req.token.require.claim('user_id', user_id)
        .guard('Sorry you can only update your own account.')

    // passed, update logic here
})

Chaining roles and claims

You can require multiple roles and claims by chaining with or and and.

app.post('/blog', function (req, res) {
    req.token.require
        .role('blog:post')
        .or.role('blog:admin')
        .or.role('god')
        .guard()
    
    // passed, post the blog
})
app.delete('/blog/:id', function (req, res) {
    const blogPost = '...'

    req.token.require
        .role('admin')
        .or.claim('user_id', blogPost.ownerUserId)
        .and.role('blog:delete')
        .guard()
    
    // passed, delete the blog
})

Check

Works like .guard() but returns true/false instead of throwing an error. Supports [chaining](#Chaining roles and claims) as well.

app.get('/admin-area', function (req, res) {
    const isAdmin = req.token.require.role('admin').check
    
    if(isAdmin) {
        res.send('Welcome to the secret area')
    } else{
        res.redirect('/')
    }
})

Getting a claim

Retrieving the value of a claim is easy

app.get('/', function (req, res) {
    const name = req.token.claims.name
    
    res.send(`Hello ${name}`)
})

jwt-guard's People

Contributors

dependabot[bot] avatar justinkalland avatar

Stargazers

 avatar Ops avatar

Watchers

James Cloos avatar  avatar

Forkers

alex-shilman

jwt-guard's Issues

Setup Github Actions

I would like to setup Github Actions for:

  • CI of testing / linting
  • Automatic publishing to NPM using master chore: commits

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.