一个 Sumor Cloud 工具。
更多文档
用于 ExpressJS 的令牌中间件。
npm i @sumor/token-middleware --save
需要 Node.JS 版本 18.x 或更高
由于此包是使用 ESModule 编写的,请在您的 package.json
文件中更改以下代码:
{
"type": "module"
}
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: ['读取', '写入'],
AUTH2: ['读取']
}
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', '读取') // true
const hasAuth1Write = req.token.has('AUTH1', '写入') // true
const hasAuth2Read = req.token.has('AUTH2', '读取') // true
const hasAuth2Write = req.token.has('AUTH2', '写入') // false
// 检查权限
req.token.check('AUTH1') // 通过
req.token.check('AUTH2') // 通过
req.token.check('AUTH3') // 抛出错误 PERMISSION_DENIED 权限被拒绝:AUTH3
req.token.check('AUTH1', '读取') // 通过
req.token.check('AUTH1', '写入') // 通过
req.token.check('AUTH2', '读取') // 通过
req.token.check('AUTH2', '写入') // 抛出错误 PERMISSION_DENIED 权限被拒绝:AUTH2=WRITE