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

如何在Laravel中认证Vue.js/Axios发起的API路由请求?

解决Laravel 5.6中Vue+Axios调用带Auth中间件的API出现401的问题

你遇到的是前端请求无法通过API认证的典型场景,我来帮你梳理几个关键的解决方向:

1. 确认认证Guard的选择

Laravel的auth中间件默认在api.php路由里使用api guard(依赖token认证),而你的Blade模板属于web会话环境(依赖session cookie)。如果你的前端是和后端同域的Blade+Vue,优先考虑用web guard来认证API请求:

修改你的API路由定义,把auth:api换成auth:web:

Route::middleware('auth:web')->group(function () {
    // 你的API路由,比如:
    Route::get('/user/profile', 'UserController@profile');
});

这样就能让已登录的用户通过会话cookie直接访问API,不需要额外的token。

2. 确保Axios带上CSRF令牌

因为是同域请求,Laravel的web会话会校验CSRF令牌,你需要在请求头里带上它:

首先在Blade模板的<head>里添加CSRF meta标签:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后在你的Vue入口文件(比如resources/js/app.js)里全局配置Axios:

import axios from 'axios';

// 全局设置CSRF令牌
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;
// 开启凭证携带(确保session cookie被传递)
axios.defaults.withCredentials = true;

window.axios = axios;

3. 如果坚持用API Guard(Token认证)

如果你需要用api guard,推荐用Laravel Passport的CreateFreshApiToken中间件来简化第一方前端的认证:

步骤1:启用中间件

在app/Http/Kernel.php的web中间件组里添加该中间件:

protected $middlewareGroups = [
    'web' => [
        // ...其他已有的中间件
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
    ],
];

步骤2:配置Axios

这个中间件会自动在会话cookie里注入API token,Axios请求时会自动带上Authorization: Bearer {token}头,你只需要确保Axios开启withCredentials即可(和上面的配置一致)。

这样你的API路由用auth:api中间件时,前端请求就能正常通过认证了。

4. 排查常见坑点

  • 检查浏览器控制台的请求头,确认X-CSRF-TOKEN和Cookie是否被正确发送
  • 确保用户确实已登录(可以在Blade里用{{ auth()->check() }}验证)
  • 如果是跨域场景,还需要在Laravel里配置CORS(不过你是从Blade发起,应该是同域,这个可以忽略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:49