@sumor/token-middleware

token-middleware

一个Sumor Cloud 工具。
更多文档
一个用于 ExpressJS 的令牌中间件。

CI
Test
Coverage
Audit

安装

npm i @sumor/token-middleware --save

先决条件

Node.JS 版本

要求 Node.JS 版本 16.x 或更高。

需要 Node.JS ES 模块

由于此包是使用 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('Hello World')
})

权限检查

// 获取权限
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 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 Permission denied: AUTH2=WRITE