@sumor/token-middleware

Токен-промежуточный уровень

Инструмент Sumor Cloud.
Больше документации

Промежуточное ПО для токена для ExpressJS.

CI Test Coverage Audit

Установка

npm i @sumor/token-middleware --save

Предварительные условия

Версия Node.JS

Требуется версия Node.JS 18.x или выше.

Требуется модуль ES Node.JS

Поскольку этот пакет написан в виде модуля ES,
пожалуйста, измените следующий код в вашем файле package.json:

{
  "type": "module"
}

Использование

Добавление токен-промежуточного уровня к приложению ExpressJS

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

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

// Загрузить токен
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()
})

// Установить токен
app.get('/login', async (req, res) => {
  const username = req.query.username
  const password = req.query.password
  req.token.id = await createToken(username, password)
  // Это автоматически добавит токен в заголовок ответа cookie 't'
  res.send('Вход выполнен успешно')
})

// Использовать токен
app.get('/api', (req, res) => {
  // Проверить разрешение
  req.token.check('AUTH1')

  res.send('Привет, мир')
})

Проверка разрешения

// Получить разрешение
req.token.permission = {
  AUTH1: ['READ', 'WRITE'],
  AUTH2: ['READ']
}
const hasAuth1 = req.token.has('AUTH1') // true
const hasAuth2 = req.token.has('AUTH2') // true
const hasAuth3 = req.token.has('AUTH3') // false

const hasAuth1Read = req.token.has('AUTH1', 'READ') // true
const hasAuth1Write = req.token.has('AUTH1', 'WRITE') // true
const hasAuth2Read = req.token.has('AUTH2', 'READ') // true
const hasAuth2Write = req.token.has('AUTH2', 'WRITE') // false

// Проверить разрешение
req.token.check('AUTH1') // выполнено
req.token.check('AUTH2') // выполнено
req.token.check('AUTH3') // выдаст ошибку PERMISSION_DENIED Доступ запрещен: AUTH3
req.token.check('AUTH1', 'READ') // выполнено
req.token.check('AUTH1', 'WRITE') // выполнено
req.token.check('AUTH2', 'READ') // выполнено
req.token.check('AUTH2', 'WRITE') // выдаст ошибку PERMISSION_DENIED Доступ запрещен: AUTH2=WRITE