@sumor/token-middleware

token-middleware

Una herramienta de Sumor Cloud.
Más Documentación

Un middleware de token para ExpressJS.

CI Test Coverage Audit

Instalación

npm i @sumor/token-middleware --save

Requisitos previos

Versión de Node.JS

Se requiere la versión de Node.JS 18.x o superior.

Requerir módulo ES de Node.JS

Dado que este paquete está escrito en módulo ES, por favor cambia el siguiente código en tu archivo package.json:

{
  "type": "module"
}

Uso

Añadir el middleware de token a una aplicación ExpressJS

import express from 'express'
import tokenMiddleware from '@sumor/token-middleware'

const app = express()
app.use(tokenMiddleware)

// cargar token
app.use(async (req, res, next) => {
  const tokenId = req.token.id
  const tokenInfo = await fetchToken(tokenId)
  req.token.user = tokenInfo.user
  req.token.data = tokenInfo.data
  req.token.permission = tokenInfo.permission
  next()
})

// establecer token
app.get('/login', async (req, res) => {
  const username = req.query.username
  const password = req.query.password
  req.token.id = await createToken(username, password)
  // se añadirá automáticamente el token a la cabecera de la respuesta con la cookie 't'
  res.send('Inicio de sesión exitoso')
})

// usar token
app.get('/api', (req, res) => {
  // verificar permiso
  req.token.check('AUTH1')

  res.send('Hola Mundo')
})

Verificación de permisos

// obtener permiso
req.token.permission = {
  AUTH1: ['LEER', 'ESCRIBIR'],
  AUTH2: ['LEER']
}
const tieneAuth1 = req.token.has('AUTH1') // true
const tieneAuth2 = req.token.has('AUTH2') // true
const tieneAuth3 = req.token.has('AUTH3') // false

const tieneAuth1Leer = req.token.has('AUTH1', 'LEER') // true
const tieneAuth1Escribir = req.token.has('AUTH1', 'ESCRIBIR') // true
const tieneAuth2Leer = req.token.has('AUTH2', 'LEER') // true
const tieneAuth2Escribir = req.token.has('AUTH2', 'ESCRIBIR') // false

// verificar permiso
req.token.check('AUTH1') // pasa
req.token.check('AUTH2') // pasa
req.token.check('AUTH3') // lanza un Error PERMISSION_DENIED Permiso denegado: AUTH3
req.token.check('AUTH1', 'LEER') // pasa
req.token.check('AUTH1', 'ESCRIBIR') // pasa
req.token.check('AUTH2', 'LEER') // pasa
req.token.check('AUTH2', 'ESCRIBIR') // lanza un Error PERMISSION_DENIED Permiso denegado: AUTH2=ESCRIBIR