简介
koa2中间件,主要作用是校验签名.内部集成了jwt的签名,解签及Koa2和egg中间件
安装&配置
npm i @ne_fe/koa-auth -S
使用
引用koa-auth
const { jwt,utils } = require('@ne_fe/koa-auth');
use jwt.sign
jwt.sign(payload[,exp]);
参数 | 下级参数 | 类型 | 是否必传 | 说明 |
---|---|---|---|---|
payload | Object | true | 加密的主体 | |
_id | String | true | 用户唯一id | |
ip | String | true | 用户ip地址,可以使用 utils.getIp(ctx)得到 | |
* | Any | false | 自定义参数 | |
exp | String|Number | false | 失效时间 默认为30m |
详细的时间参数请见jsonwebtoken
use jwt.verify
jwt.verify(token);
参数 | 类型 | 是否必传 | 说明 |
---|---|---|---|
token | String | true | 签名后的字符串 |
use jwt middleware
Koa中中间件用法
app.use(jwt.middleware(config[,callback]));
// 如果签名成功,则会在ctx增加user属性--> ctx.user
参数 | 下级参数 | 类型 | 是否必传 | 说明 |
---|---|---|---|---|
config | Object | true | 中间件的配置信息 | |
match | String|Array|RegExp | false | url黑名单,只有匹配该名单的url才需要校验,默认'/',即所有url都需要验签 | |
except | String|Array|RegExp | false | url白名单,匹配该名单的url不需要校验,如果 "match"和"except"同时存在,则只生效match | |
ip | Boolean | false | 校验时,是否需要匹配IP,默认true | |
callback | Function | false | 在解签成功后,会触发回调函数,如果回调函数返回值为false,则会抛出401错误;callback中可以放置自定义校验规则 |
Egg用法
在 middleware 文件中增加auth.js(文件名可以任意命名)文件
const { jwt } = require('@ne_fe/koa-auth');
module.exports = jwt.middleware;
如果想添加回调函数,则需要转换下
module.exports = options=>{
return jwt.middleware(options,callback);
}
在 config.default.js 文件中
这里(auth)名称要和middleware中的(auth.js)文件名一样,当然你也可以使用任何命名,只要保持一致即可
config={
middleware:['auth'...],
// 这里的配置和koa中间件配置一致
auth:{
match:'',
except:'',
ip:true,
},
}
将老代码改为使用koa-auth
在controller/serverAdmin.js文件中
postLogin方法内,修改签名方式
const { jwt, utils } = require('@ne_fe/koa-auth');
....
const token = jwt.sign({
_id: admin._id,
ip: utils.getIp(ctx,{xRealIp:false}),
}[,exp]);//在签名的时候,如果想延长签名失效时间,可以传入exp参数