ExpressJS를 위한 토큰 미들웨어.
npm i @sumor/token-middleware --save
Node.JS 버전 18.x 이상 필요
이 패키지는 ES 모듈로 작성되었기 때문에,
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)
// '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') // 참
const hasAuth2 = req.token.has('AUTH2') // 참
const hasAuth3 = req.token.has('AUTH3') // 거짓
const hasAuth1Read = req.token.has('AUTH1', 'READ') // 참
const hasAuth1Write = req.token.has('AUTH1', 'WRITE') // 참
const hasAuth2Read = req.token.has('AUTH2', 'READ') // 참
const hasAuth2Write = req.token.has('AUTH2', 'WRITE') // 거짓
// 권한 확인
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