Skip to content

请求与登录状态 ​

请求封装 ​

src/utils/request.ts 创建统一 Axios 实例:

  • 开发环境基础地址为 /api。
  • 默认超时 10 秒。
  • 数组查询参数使用同名参数重复提交。
  • 空字符串、null 和 undefined 不进入查询字符串。
  • JSON 默认使用 application/json;charset=utf-8。
  • FormData 请求交给浏览器自动生成 multipart boundary。

Token 注入 ​

除显式 skipAuth 的请求外,如果本地存在 Token,请求头会增加:

http
Authorization: Bearer <token>

本地存储只用于保持页面会话,后端仍通过 JWT 和 Redis 服务端 Token 决定是否有效。

登录初始化 ​

登录成功后不是立即只显示成功提示,而是继续获取:

  • mine:当前用户、角色和权限字符串。
  • mineResources:当前用户资源树。

两者都成功后才完成认证上下文初始化。如果初始化失败,前端清除刚保存的 Token,避免同时出现“登录成功”和“认证失败”。

并发路由进入时复用同一个初始化 Promise,防止重复调用用户和资源接口。

401 ​

HTTP 401 或业务码 401 会进入统一未认证处理。全局状态保证同一批并发失败只执行一次:

  1. 提示登录状态失效。
  2. 清除 Token 和权限状态。
  3. 清空页签。
  4. 跳转登录页。

登录页、首页和个人中心不依赖角色菜单权限。即使用户没有任何有效角色,也必须能够进入个人中心并退出登录。

403 ​

403 表示已经登录但缺少接口权限:

  • 不清除 Token。
  • 不跳转登录页。
  • 页面展示后端权限提示。
  • 管理员检查对应 api: 资源授权。

下载请求 ​

文件下载返回 Blob,错误时后端可能返回 JSON。下载工具应先判断响应类型:

  • 二进制:触发浏览器保存。
  • JSON:解析业务码和 message。
  • 401:进入统一登录失效。
  • 403:提示权限不足。

预览接口与下载接口保持不同 Content-Disposition,不使用下载逻辑强行处理图片预览。

可选请求参数 ​

页面需要正常调用的接口不要先用前端权限判断阻止请求;后端是最终鉴权边界。只有按钮、菜单等展示元素才根据视图权限隐藏或禁用。

YeahBoot 官方技术文档