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

Laravel Passport认证:如何在Bootstrap.js中配置Axios携带Bearer Token

我来帮你完善这个Axios的全局Token配置,完美适配Laravel Passport的认证需求,还能严格遵循DRY原则~

完善Axios全局携带Bearer Token的配置方案

1. 核心逻辑梳理

我们要实现的核心目标很明确:

  • 一次性获取有效的Personal Access Token
  • 全局注入到Axios请求头,让所有请求自动携带
  • 处理Token缺失、过期等异常情况
  • 避免重复请求Token,兼顾性能和体验

2. 完整的bootstrap.js配置代码

// bootstrap.js
import axios from 'axios';

window.axios = axios;

// 先设置Axios基础通用头
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

// 全局认证Token初始化函数
async function setupAuthToken() {
    try {
        // 调用后端接口获取个人访问Token列表
        const response = await window.axios.get('/oauth/personal-access-tokens');
        
        // 校验并提取有效Token(取第一个可用的Token)
        if (response.data && Array.isArray(response.data) && response.data.length > 0) {
            const validToken = response.data[0].token;
            // 注入到Axios全局请求头
            window.axios.defaults.headers.common['Authorization'] = `Bearer ${validToken}`;
            // 把Token存在localStorage,页面刷新后无需重新请求
            localStorage.setItem('laravel_passport_token', validToken);
        } else {
            console.warn('未找到有效的个人访问Token');
            // 可选:无Token时跳转到登录/Token生成页面
            // window.location.href = '/generate-token';
        }
    } catch (error) {
        console.error('获取认证Token失败:', error);
        // 401未授权时自动跳转到登录页
        if (error.response?.status === 401) {
            window.location.href = '/login';
        }
    }
}

// 页面加载时立即执行Token配置
setupAuthToken();

// 额外优化:页面刷新时从localStorage恢复Token,避免重复请求
const savedToken = localStorage.getItem('laravel_passport_token');
if (savedToken) {
    window.axios.defaults.headers.common['Authorization'] = `Bearer ${savedToken}`;
}

3. 关键细节解释

  • async/await写法:比你原来的.then()更简洁易读,符合现代JS开发习惯
  • 全局请求头注入:通过axios.defaults.headers.common设置后,所有Axios发起的请求都会自动带上Authorization: Bearer xxx头,彻底遵循DRY原则
  • localStorage持久化:页面刷新后无需重新调用Token接口,直接从本地缓存恢复,提升用户体验
  • 异常处理:捕获请求失败、Token缺失、未授权等场景,给出友好的处理逻辑
  • 安全校验:确保从后端拿到的是有效数组再提取Token,避免空值导致的请求报错

4. 可选优化建议

  • 可以添加Axios请求拦截器,在每个请求发送前检查Token是否过期,过期则自动刷新
  • 对于敏感操作,建议在后端额外校验Token的权限范围(Laravel Passport本身支持,可结合策略进一步加强)
  • 如果你的应用支持多用户,可以把Token和用户ID绑定存储,避免切换用户时的Token冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:08:59