Vue+Laravel Passport认证API请求401未授权问题求助
解决Laravel Passport登录后Vue Axios请求401未授权问题
我帮你梳理几个关键排查点,按顺序检查应该能定位并解决这个问题:
一、确认Axios自动携带Authorization Token
Laravel Passport的前端集成核心是让Axios在每次请求时自动带上Bearer Token,你需要检查以下细节:
- 检查bootstrap.js的请求拦截器配置
打开resources/js/bootstrap.js,确认是否添加了Passport的请求拦截器,用来从localStorage读取token并注入请求头:
window.axios.interceptors.request.use(function (config) { // 注意这里的key要和你登录时存储token的key一致 config.headers.Authorization = 'Bearer ' + localStorage.getItem('access_token'); return config; });
- 确认登录成功后正确存储了token
检查你的登录Vue组件,确保登录请求成功后把接口返回的token存入localStorage:
axios.post('/login', credentials) .then(response => { // 把接口返回的access_token存入本地存储 localStorage.setItem('access_token', response.data.access_token); // 登录成功后的页面跳转逻辑 }) .catch(error => { console.error(error); });
二、检查Laravel后端Passport核心配置
- 用户模型是否引入HasApiTokens Trait
打开app/User.php,确认已经引入并使用Passport的HasApiTokenstrait:
use Laravel\Passport\HasApiTokens; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens, Notifiable; // ... 其他代码 }
- AuthServiceProvider是否注册Passport路由
打开app/Providers/AuthServiceProvider.php,确认boot方法里注册了Passport的OAuth路由:
public function boot() { $this->registerPolicies(); // 注册Passport的OAuth相关路由 Passport::routes(); }
- 确认API Guard使用Passport驱动
打开config/auth.php,检查guards下的api驱动是否设置为passport:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
三、验证请求头是否正确发送
打开浏览器开发者工具(F12),切换到Network标签,发起/api/calendar请求后查看请求的Request Headers:
- 确认存在
Authorization: Bearer 你的token值这个字段 - 如果没有这个字段,说明Axios拦截器未生效,回到第一步排查前端逻辑
四、测试Token有效性
如果请求头带了token仍返回401,可以用Postman直接测试:
- 发送POST请求到
/oauth/token获取有效token(参数:grant_type=password、username=你的账号、password=你的密码、client_id=密码客户端ID、client_secret=客户端密钥) - 用获取到的token发送GET请求到
/api/calendar,手动添加请求头Authorization: Bearer 你的token- 如果Postman请求成功,说明后端配置正常,问题出在前端Axios的token携带逻辑
- 如果Postman也返回401,说明token无效或后端Passport配置有遗漏,重新检查第二步的后端配置
内容的提问来源于stack exchange,提问作者Herb
相关产品推荐
相关产品推荐

