在 Vue 项目中,最规范做法是通过 Axios 请求拦截器自动携带 localStorage 中的 Token。具体为:封装 axios 实例并配置 baseURL、超时等;请求前读取 token 并设为 Authorization 头,支持 skipAuth 跳过;处理 Content-Type、耗时埋点及多来源兼容;最后全局挂载供组件调用。
在 Vue 项目中,通过 Axios 请求拦截器自动携带本地存储的 Token 是最规范、可维护性最强的做法。核心逻辑是:每次发请求前,从 localStorage(或 sessionStorage)读取 token,并注入到请求头的 Authorization 字段中,且支持跳过认证的特殊请求。
不要直接使用 axios 原生对象,而是新建一个封装实例,便于集中管理 baseURL、超时、跨域等配置:
src/utils/request.js(或 src/service/index.js)中创建实例baseURL 为后端 API 根路径,避免每个请求写完整 URLwithCredentials: true(如需携带 cookie)10000 毫秒)关键步骤是在请求发出前检查是否存在有效 token,并决定是否添加到请求头:
localStorage.getItem('token') 或 sessionStorage.getItem('token') 获取 token(推荐用 localStorage 保持登录态)config.headers.Authorization = 'Bearer ' + token
skipAuth: true,比如登录接口本身就不需要 token实际项目中容易忽略但必须考虑的细节:
Content-Type,可根据 config.data 类型(如 FormData、Plain Object、JSON 字符串)自动补全,避免后端解析失败config.metadata = { startTime: new Date() },供响应拦截器计算耗时Bearer xxx 导致认证失败完成封装后,在 main.js 或 app.js 中统一挂载,让所有组件可通过 this.$http 或组合式 API 的 useRequest 调用:
export default service
app.config.globalProperties.$http = service(Vue 3 setup 语法糖下推荐用 provide/inject 或独立 hooks)this.$http.get('/user') 或 await api.get('/profile'),无需重复传 token