eggjs中使用jwt

开发接口时需要生成token 和校验token,egg-jwt就是一个很不错的插件,下边就教大家如何使用,废话不多说,先看效果
在这里插入图片描述
在这里插入图片描述

开始教程

安装包

yarn add egg-jwt

全局引入jwt

config/plugin.js

module.exports = {
	jwt: {
    enable: true,
    package: "egg-jwt"
  }
};

全局配置jwt

config.default.js

module.exports = appInfo => {
  //...

  // 全局配置jwt
  config.jwt = {
    secret: "12345678" // 加密秘钥
  };

};

简单使用jwt

在这里插入图片描述

controller/login.js

实验生成token,登录后将token返回给前端
'use strict';
const Controller = require('egg').Controller;
class LoginController extends Controller {
  async index() {
    const { ctx } = this;
    let params = ctx.request.body;
    const token = await ctx.app.jwt.sign(params, ctx.app.config.jwt.secret, { expiresIn: "24h" });
    console.log('token-create: ', token);
    ctx.body = {
      code: 0,
      token
    }
  }
}

module.exports = LoginController;

验证token

controller/login.js
使用jwt.verify() 来检测token的正确性;

'use strict';
const Controller = require('egg').Controller;

class LoginController extends Controller {
  // 验证token
  async testToken() {
    const { ctx } = this;
    const token = ctx.request.header.token;
    console.log('token==2: ', token);
    try {
      ctx.app.jwt.verify(token, ctx.app.jwt.secret);
      ctx.body = 'token正常'
    } catch (err) {
      ctx.body = 'token有问题'
    }
  }

}

module.exports = LoginController;

进阶-中间件处理token的校验

在每个controller中验证太麻烦,可以用中间件统一验证,并挂载到路由上
app/middleware/jwtVerify.js

'use strict';
// 定制白名单
const whiteList = ['/login', '/login/register'];

module.exports = () => {
  return async function (ctx, next) {
    if (!whiteList.some(item => item == ctx.request.url)) {//判断接口路径是否在白名单
      let token = ctx.request.header.token//拿到token
      // console.log('jwtm---token----: ', token);
      if (token) {//如果token存在
        try{
          let decoded = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret)//解密token
          // decoded= {name, password, iat, exp} // jwt.sign时的数据,和iat,exp
          await next()
        }catch(err){
          ctx.body = {
            code: 1,
            msg: 'token不对'
          }
        }
      } else {
        ctx.body = {
          code: 1,
          msg: '没有token'
        }
      }
    } else {
      await next()
    }
  }
}

配置路由

router.js

'use strict';
module.exports = app => {
  const { router, controller, middleware } = app;
  router.post('/login', controller.login.index);
  router.post('/login/test-token', middleware.jwtVerify(), controller.login.testToken);
};

至此,jwt生成token,和验证token处理完毕。
如果帮到了正在研究的你,请打赏一元表示鼓励哈,要么点个关注和赞也行哈。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012570307/article/details/127099068