Koa2通过jwt实现权限校验


koa2是基于nodeJs平台的下一代web开发框架

采用es6语法,写法简洁飘逸
通过jsonwebtoken中间件,可以非常快速的实现权限鉴定
首先安装jsonwebtoken中间件,与koa-body,这里主要是通过koa-body获取前端传输的参数,由于有文件上传需求,便使用了koa-body,也可以使用koa-bodypraser

npm install jsonwebtoken koa-body --save
//或者
npm i jsonwebtoken koa-body

如安装过于缓慢可以使用cnpm进行下载
在rouer下新建login.js路由模块,用于处理登录请求

const Router = require('koa-router')
const jwt = require('jsowebtoken')
const KoaBody = require('koa-body')
const secret = 'dfgdafgghagfhjkafhkahfkafjd'
login.use(KoaBody());
login.post('/',async (ctx)=>{
       let account = ctx.request.body.account;
       let password = ctx.request.body.password;
       //这里写登录账号的判断
       //登录成功则进行下一步操作生成token
       let payload = {password:password.userNumber,time:new Date().getTime(),timeout:1000*60*60*2}
       let token = jwt.sign(payload, secret);
       //payload是token中携带的信息,secret字段是用于混淆加密,避免token被破解
       //生成token后给前端返回token即可
       ctx.body={
           token:token,
           msg:"login success"
       }
})
module.exports = login;

在/router/index中引入login路由

const Router = require("koa-router");
const router = new Router();
const login = require("./user/login.js")
router.use('/login', login.routes(), login.allowedMethods());
modelu.exports = router;

最后在app.js中引入router即可,生成token便返回前端的工作便完成了
接下来是对token进行校验,如未携带token则拦截请求,token过期则需要重新登录
在/utils目录下创建check中间件,用于校验token

 

const Promise = require("bluebird");
const jwt = require("jsonwebtoken");
const verify = Promise.promisify(jwt.verify);
const secret = 'dfgdafgghagfhjkafhkahfkafjd'//此处需与上文的secret一致,否则token会校验失败
async function check(ctx, next) {
let url = ctx.request.url;
// 登录 不用检查
if (url == "/login" || url == "/uploads" || url == "/") await next();
else {
  // 规定token写在header 的 'autohrization' 
  let token = ctx.request.headers["authorization"];
  // 解码
  let payload = await verify(token,secret);
  let { time, timeout } = payload;
  let data = new Date().getTime();
  if (data - time <= timeout) {
      // 未过期
    await next();
  } else {
      //过期
  ctx.body = {
    status: 50014,
    message:'token 已过期'
     };
    }
  }
}
module.exports = check

最后在app.js中引入check中间件即可

const check = require("./utils/check")
app.use(check)

声明:一栈|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Koa2通过jwt实现权限校验


好好学习,天天向上