• 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处理完毕。
    如果帮到了正在研究的你,请打赏一元表示鼓励哈,要么点个关注和赞也行哈。
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    053基于web+springboot的宠物咖啡馆平台的设计与实现
    mysql索引创建语句记录
    苹果手机用什么无线耳机比较好?苹果耳机平替品牌推荐
    【算法|双指针系列No.5】leetcode611. 有效三角形的个数
    手机投屏到电脑时,手机提示连接失败
    nssm nginx window 部署和开机启动服务
    RocketMQ 顺序消息解析——图解、源码级解析
    【数据结构】二叉树的链式结构及实现
    深度解析BERT:从理论到Pytorch实战
    应用内广告竞价策略如何让APP广告变现收益最大化?
  • 原文地址:https://blog.csdn.net/u012570307/article/details/127099068