0.0.13 • Published 4 years ago
jwt-rt-middleware v0.0.13
jwt-rt-middleware
适用于routing-controllers的JWT中间件
Installation
npm install --save jwt-rt-middleware
// or
yarn add jwt-rt-middlewareQuick Start
import { createJWTMiddleware } from 'jwt-rt-middleware'
// 指定JWT中携带的信息类型
interface CurrentUser {
uuid: string;
user_name: string;
}
// 创建一个服务器专属的JWT中间件
export const JWTMiddleware = createJWTMiddleware<CurrentUser>({
secret: 'YOUR_JWT_SECRET',
expiresIn: '2h',
token: { type: 'header' }
})现在你可以在任意层级的使用它进行JWT校验
import { JsonController, UseBefore, Get } from "routing-controllers";
import { JWTMiddleware } from "../middleware"
@JsonController('/auth')
export default class UserController {
@Get('/test')
@UseBefore(JWTMiddleware)
async test() {
// ...
}
}调用 ${prefix}/auth/test 接口测试接入状况
token 签发
import { JsonController, UseBefore, Post, Ctx } from "routing-controllers";
import { Context } from "koa";
import { JWTMiddleware } from "../middleware"
@JsonController('/auth')
export default class UserController {
@Post('/login')
async login(
@BodyParam('account', { required: true }) account: string,
@BodyParam('password', { required: true }) password: string,
@Ctx() ctx: Context
) {
// 验证密码并查询用户信息
const { data: user } = await postSomeLoginMethod({ account, password })
// 调用静态方法自动签发并将 token 注入 ctx.response
JWTMiddleware.injectToken(ctx, user)
return { code: 0 }
}
}Configuration
createJWTMiddleware 参数
| name | required | type | default | example | description |
|---|---|---|---|---|---|
| token | true | TokenOptions | -- | { type: "header" } | 设置token的注入方式,设置type 为 header 则表示使用规范的JWT Authorization |
| ctxState | false | ctxStateOptions | { tokenKey: "token", payloadKey: "payload" } | 见下表 | 设置JWT在接口上下文的存储方式,当前设置可以通过ctx.state.token 获取token,通过ctx.state.payload 获取token中携带的信息 |
| passthrough | false | boolean | false | true | 设置接口是否允许跳过检查 |
| secret | true | string | -- | "some secret" | JWT 签发密钥 |
| expiresIn | false | string | "2h" | "2h" | 签发的JWT的过期时间 |
| handleInsertPayload | false | <A extends T>(payload: T) => A | -- | -- | 在token签发后添加一些增量信息到payload里,方便接口获取 |
| handleValidatePayload | false | (payload: T) => boolean | -- | -- | 设置校验payload合法的函数 |
tokenOptions
// 当 type 为 cookie 时,中间件将会把token设置到cookie中
export interface TokenCookie {
type: "cookie";
/** 将要设置的 cookie key */
key: string;
/** 指定cookie的域名 */
domain?: string;
/** 指定cookie是否能被客户端代码中获取 */
httpOnly?: boolean;
/** 指定cookie生效的页面路径 */
path?: string;
}
// 当 type 为 header 时,中间件将会按标准形式设置到 Authorization 头部
export interface TokenHeader {
type: "header";
}ctxStateOptions
| name | required | type | default | description |
|---|---|---|---|---|
| tokenKey | false | string | "token" | 指定签发的token存放于请求上下文的位置ctx.state[tokenKey] |
| payloadKey | false | string | "payload" | 指定token中的信息存放于请求上下文的位置ctx.state[payloadKey] |
目前支持
koa类型的中间件- JWT 的简单校验与签发
- 通过
cookie的方式获取与签发Token
计划支持
- 提供
express的中间件 - 更加详细的签发参数
warning
- 当前为开发初期,可能会有用法上的微调,将在1.0的版本中提供稳定的API。
欢迎在使用的过程中提交issue反馈,感谢支持