如何在 Vue3 中正确传递 Bearer Token 以避免 401 错误

发布时间 - 2026-01-25 00:00:00    点击率:

vue3 应用中调用登录接口后虽已将 token 存入 localstorage,但后续 api 请求仍返回 401,根本原因在于 axios 并未自动读取并携带该 token —— 必须显式在请求头中设置 `authorization: bearer `。

上述代码看似逻辑连贯:登录成功 → 保存 token → 获取用户数据 → 跳转首页。但问题出在 axios.get('user/userdata') 这一行——它默认不读取 localStorage 中的 token,也不会自动添加 Authorization 请求头,因此后端因缺少有效认证凭据而返回 401 Unauthorized。

✅ 正确做法是:在每次需要鉴权的请求中,手动注入 token 头。修改后的关键代码如下:

const response = await axios.post('user/login', {
  email: thi

s.email, password: this.password }).then(async (response) => { console.log('Login success:', response.data); // ✅ 正确保存 token localStorage.setItem('token', response.data.token); // ✅ 关键修复:显式传入 Authorization 头 const userdata = await axios.get('user/userdata', { headers: { Authorization: `Bearer ${localStorage.getItem('token')}` } }); this.$store.dispatch('user', userdata.data.userDataDTO); this.$router.push('/home'); }).catch(err => { console.error('Login request failed:', err.response?.data || err.message); this.failedToLogin = true; });

⚠️ 注意事项:

  • 不要依赖“先存后用”的时序假定:localStorage.setItem() 是同步操作,但 axios 请求本身不感知存储状态,必须主动传参;
  • 避免重复获取 token:localStorage.getItem('token') 在此处是安全且必要的,无需额外判断(若为空,后端自然返回 401,便于统一错误处理);
  • 更优实践:建议将 token 注入逻辑全局化,例如通过 axios 拦截器统一设置请求头,避免每个请求都手动写:
// main.js 或 api/utils.js 中配置
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

这样,所有后续 axios.get()、axios.post() 等请求都会自动携带 token,大幅提升可维护性与健壮性。

? 补充说明:你提到“刷新页面后能自动登录”,正是因为初始化时(如路由守卫或 store 模块)显式读取了 localStorage 并设置了请求头(或已触发拦截器),印证了问题本质不是 token 无效,而是缺失主动授权声明。始终牢记:前端存储 ≠ 自动认证——安全机制要求每次请求都明确声明身份。


# vue  # word  # js  # 前端  # vue3  # axios  # 后端  # ai  # ios  # 路由  # Token  # 接口  # 拦截器  # 跳转  # 首页  # 出在  # 正是因为  # 根本原因  # 这一行  # 虽已  # 若为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何快速打造个性化非模板自助建站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  EditPlus中的正则表达式 实战(2)  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel怎么在Controller之外的地方验证数据  如何在万网利用已有域名快速建站?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在建站主机中优化服务器配置?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何基于PHP生成高效IDC网络公司建站源码?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Swift中循环语句中的转移语句 break 和 continue  Laravel用户密码怎么加密_Laravel Hash门面使用教程  制作企业网站建设方案,怎样建设一个公司网站?  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何用低价快速搭建高质量网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  西安专业网站制作公司有哪些,陕西省建行官方网站?  nginx修改上传文件大小限制的方法  Python数据仓库与ETL构建实战_Airflow调度流程详解  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在阿里云通过域名搭建网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  详解Oracle修改字段类型方法总结  Laravel怎么使用artisan命令缓存配置和视图  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何快速搭建支持数据库操作的智能建站平台?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在云主机快速搭建网站站点?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】