后台交互流程

XYGo Admin 2025-02-20 193 次阅读

前后端请求流程、JWT 认证机制与接口规范

后台交互流程

请求流程

前端发起请求到后端响应的完整链路:

复制代码
前端 API 调用
  → Axios 拦截器(自动注入 Token)
    → HTTP 请求
      → Nginx 反向代理
        → GoFrame HTTP Server
          → CORS 中间件
            → 慢接口监控中间件
              → 响应包装中间件
                → 鉴权中间件(JWT 校验)
                  → 操作日志中间件
                    → Controller
                      → Service → Logic → DAO → DB

JWT 认证

后台管理员认证

  • Token 类型:Bearer Token
  • Header:Authorization: Bearer <token>
  • 有效期:配置文件中设置
  • 刷新机制:Token 过期后返回 code=61,前端自动跳转登录页

前台会员认证

  • Token 类型:自定义 Header
  • Header:Xy-User-Token: <token>
  • 独立于后台管理员 Token,互不影响

被踢下线

当管理员在其他设备登录时,当前设备会收到 code=10010,前端弹窗提示并跳转登录页。

统一响应格式

所有接口返回统一的 JSON 结构:

json 复制代码
{
  "code": 0,
  "message": "success",
  "data": {},
  "traceId": "abc123"
}
字段 说明
code 业务状态码,0=成功,-1=失败,61=未授权,10010=被踢下线
message 提示信息
data 业务数据
traceId 请求追踪 ID

前端请求封装

项目提供三套请求实例:

typescript 复制代码
import { adminRequest } from '@/utils/http'
import { memberRequest } from '@/utils/http'
import { siteRequest } from '@/utils/http'

// 后台管理接口
const res = await adminRequest.get({ url: '/user/list' })

// 会员接口
const res = await memberRequest.post({ url: '/auth/login', params: data })

// 公共接口(无需登录)
const res = await siteRequest.get({ url: '/doc/list' })

请求拦截器

  • 根据 URL 前缀自动区分后台 Token / 会员 Token
  • 自动从 Store 中读取并注入 Token

响应拦截器

  • code=0:返回 data 字段
  • code=61:清除 Token,跳转登录页(3 秒防抖)
  • code=10010:弹窗提示被踢下线
  • 其他:ElMessage 提示错误信息

API 定义规范(后端)

使用 GoFrame 的声明式路由,在 api/ 目录定义请求和响应结构体:

go 复制代码
type UserListReq struct {
    g.Meta   `path:"/user/list" method:"get" tags:"用户管理" summary:"用户列表"`
    Page     int    `json:"page" d:"1"`
    PageSize int    `json:"pageSize" d:"20"`
    Username string `json:"username"`
}

type UserListRes struct {
    List  []entity.AdminUser `json:"list"`
    Total int                `json:"total"`
}