You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios请求拦截器仅在页面刷新后生效问题求助

问题原因分析

你遇到的问题核心在于用户信息的获取时机:
你的代码里const user = storage.getObject('currentUser')是在axios模块加载时执行的,也就是页面初始化阶段。当用户登录成功后,currentUser被写入storage,但这个模块已经加载完成,这行代码不会再次执行,所以拦截器一直使用的是初始化时的空user值,自然不会添加Authorization请求头。只有刷新页面后,模块重新加载,才会读取到最新的用户信息。

解决方案

把获取用户信息的逻辑移到请求拦截器的回调函数内部,每次发起请求时都重新读取最新的用户数据,这样就能保证拦截器总能拿到有效的token,无需刷新页面。

修改后的完整代码如下:

import axios from 'axios' 
import storage from '@/services/storageService' 

export const http = axios.create({ 
  baseURL: 'http://localhost/api', 
}) 

http.interceptors.request.use((config) => { 
  // 每次请求前都重新获取最新的用户信息
  const user = storage.getObject('currentUser')
  if(user){ 
    console.log(user) 
    config.headers.Authorization = user.token 
  } 
  return config 
}, (err) => { 
  console.log(err) 
  return Promise.reject(err) 
}) 
额外提示

这种写法还有一个好处:如果后续有用户信息更新(比如token刷新、用户资料修改)的场景,拦截器也能自动获取到最新的数据,避免因为数据过期导致的请求授权失败问题。

内容的提问来源于stack exchange,提问作者thau0x01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:09:54