egg.js鉴权jwt

/ 0评 / 0

开启插件

//路径config/plugin.js
//npm instll egg-jwt
module.exports = {
jwt: {
    enable: true,
    package: 'egg-jwt',
  }
}

//配置 - congif/config.default.js

config.jwt = {
    secret: 'eggjwt',
  };

登录接口生成并返回token

const token = app.jwt.sign({
    id,
    account,
}, app.config.jwt.secret, { expiresIn: '1800s' });

启用jwt

//app/router.js
//引入
const { router, controller, jwt} = app;

router.get('/api', jwt, controller.api )
router.resources('api', '/api', jwt, controller.api);

上面那个是相当于egg自身的鉴权,经测试没token是没返回401的,需要自己创建一个中间件;

// 路径app/middleware/jwt.js, 没文件夹自行创建

module.exports = () => {
  return async function jwt(ctx, next) {
    const token = ctx.request.header.authorization;
    if (token) {
      // const decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);
      await next();
    } else {
      ctx.body = {
        code: 401,
        message: '非法操作',
      };
      return;
    }
  };
};

引入中间件

// router.js
const { router, controller, middleware } = app;
router.get('/api', middleware.jwt(), controller.api )
router.resources('api', '/api', middleware.jwt(), controller.api);

这样就可以自定义了;

如有错误,欢迎留言纠正!

发表评论

您的电子邮箱地址不会被公开。