三、Midway 接口安全认证

本文档介绍了如何在Midway框架中实现基于JWT的安全认证,包括安装JWT和Redis组件,配置JWT和Redis,添加安全拦截中间件,注册中间件,实现登录接口,并通过Postman验证接口访问权限。
摘要由CSDN通过智能技术生成

阅读本文前,需要提前阅读前置内容:

一、Midway 增删改查
二、Midway 增删改查的封装及工具类
三、Midway 接口安全认证
四、Midway 集成 Swagger 以及支持JWT bearer
五、Midway 中环境变量的使用

样例源码
DEMO LIVE

很多时候,后端接口需要登录后才能进行访问,甚至有的接口需要拥有相应的权限才能访问。
这里实现bearer验证方式(bearerFormat 为 JWT)。

安装JWT组件

>npm i @midwayjs/jwt@3 --save
>npm i @types/jsonwebtoken --save-dev

安装完后package.json文件中会多出如下配置

{
   
  "dependencies": {
   
    "@midwayjs/jwt": "^3.3.11"
  },
  "devDependencies": {
   
    "@types/jsonwebtoken": "^8.5.8"
  }
}

添加JWT配置

  • 修改src/config/config.default.ts,添加如下内容;
// src/config/config.default.ts
jwt: {
   
  secret: 'setscrew',
  expiresIn: 60 * 60 * 24,
}
  • 注册JWT组件;
// src/configuration.ts
import * as jwt from '@midwayjs/jwt';

@Configuration({
   
  imports: [
    jwt,
    //...
  ],
})
export class ContainerLifeCycle {
   
    //...
}

关于JWT的详细使用文档,见:http://www.midwayjs.org/docs/extensions/jwt

安装Redis组件

>npm i @midwayjs/redis@3 --save
>npm i @types/ioredis --save-dev

安装完后package.json文件中会多出如下配置

{
   
  "dependencies": {
   
    "@midwayjs/redis": "^3.0.0"
  },
  "devDependencies": {
   
    "@types/ioredis": "^4.28.7"
  }
}

注册Redis组件

// src/configuration.ts
import * as redis from '@midwayjs/redis';

@Configuration({
   
  imports: [
    redis,
    // ...
  ],
})
export class ContainerLifeCycle {
   
    // ...
}

添加配置

修改src/config/config.default.ts,添加如下内容:

添加Redis配置
// src/config/config.default.ts
redis: {
   
  client: {
   
    host: 127.0.0.1,
    port: 6379,
    db: 0,
  },
}

关于Redis的详细使用文档,见:http://www.midwayjs.org/docs/extensions/redis

添加安全拦截配置
// src/config/config.default.ts
app: {
   
  security: {
   
    prefix: '/api',         # 指定已/api开头的接口地址需要拦截
    ignore: ['/api/login'], # 指定该接口地址,不需要拦截
  },
}

添加接口安全拦截中间件

添加常量定义
// src/common/Constant.ts
export class Constant {
   
  // 登陆验证时,缓存用户登陆状态KEY的前缀
  static TOKEM = 'TOKEN';
}
添加用户访问上下文类
// src/common/UserContext.ts
/**
 * 登陆后存储访问上下文的状态数据,同时也会存在redis缓存中
 */
export class UserContext {
   
  userId: number;
  username: string;
  phoneNum: string;
  constructor(userId: number, username: string, phoneNum: string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值