Una herramienta Sumor Cloud.
Más documentación
Un middleware de token para ExpressJS.
npm i @sumor/token-middleware --save
Requiere Node.JS versión 18.x o superior
Como este paquete está escrito en módulo ES,
por favor cambia el siguiente código en tu archivo package.json
:
{
"type": "module"
}
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)
// automáticamente añadirá el token a la cookie del encabezado de respuesta 't'
res.send('Inicio de sesión exitoso')
})
// usar token
app.get('/api', (req, res) => {
// comprobar permiso
req.token.check('AUTH1')
res.send('Hola Mundo')
})
// obtener permiso
req.token.permission = {
AUTH1: ['READ', 'WRITE'],
AUTH2: ['READ']
}
const tieneAuth1 = req.token.has('AUTH1') // true
const tieneAuth2 = req.token.has('AUTH2') // true
const tieneAuth3 = req.token.has('AUTH3') // false
const tieneAuth1Lectura = req.token.has('AUTH1', 'READ') // true
const tieneAuth1Escritura = req.token.has('AUTH1', 'WRITE') // true
const tieneAuth2Lectura = req.token.has('AUTH2', 'READ') // true
const tieneAuth2Escritura = req.token.has('AUTH2', 'WRITE') // false
// comprobar 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', 'READ') // pasa
req.token.check('AUTH1', 'WRITE') // pasa
req.token.check('AUTH2', 'READ') // pasa
req.token.check('AUTH2', 'WRITE') // lanza un error PERMISSION_DENIED Permiso denegado: AUTH2=WRITE