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

Laravel Sanctum登录获Token后调用auth:sanctum路由返回401问题排查

排查Laravel Sanctum 401 Unauthenticated问题

结合你提供的代码和配置,我帮你梳理几个最可能的问题点,按顺序排查应该能解决:

1. 验证Token的传递方式是否正确

Laravel Sanctum 对API请求的Token验证,默认是读取**Authorization请求头**里的Bearer Token。你在Insomnia里测试时,有没有正确设置这个请求头?

正确的设置方式:

  • 在请求的「Headers」标签下,添加一条键值对:
    • 键:Authorization
    • 值:Bearer 你的生成的Token字符串(注意Bearer后面有一个空格,比如Bearer 5|5lR3o7vEzlm6iOieKxTW2pco1msKLN0WHb0Ozxv2relwIB4eJetyPnADOu6Dp0griYY7U1YZJEAqk6Ct)

很多人会直接把Token放在URL参数或者请求体里,这是Sanctum不认可的验证方式,一定要用Bearer Token的请求头格式。

2. 检查CORS配置是否完整

你的cors.php只设置了paths,还有几个关键配置项可能缺失,导致跨域请求时Authorization头无法正常传递:

修改config/cors.php的相关配置:

return [
    'paths' => ['api/v1/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['http://localhost:9099'], // 匹配你的前端域名,测试时也可以用['*']

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'], // 确保包含Authorization头

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true, // 这个必须设为true,跨域时允许携带凭证
];

修改后记得清除配置缓存:

php artisan config:clear

3. 确认User模型是否引入了HasApiTokens Trait

虽然你能成功生成Token,但还是要确认你的User模型是否正确引入了Sanctum的Trait,这是Token生效的基础:

打开app/User.php(Laravel7的User模型默认在这个路径),检查是否有如下代码:

use Laravel\Sanctum\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable; // 必须包含HasApiTokens

    // ... 其他代码
}

4. 检查API路由的中间件配置

确保你的带auth:sanctum的路由是放在api中间件组里的,比如:

Route::middleware('api')->group(function () {
    // 需要认证的路由
    Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
        return $request->user();
    });
});

另外,确认app/Http/Kernel.php的api中间件组包含了Sanctum的状态验证中间件(Laravel7默认会包含,但可以检查一下):

protected $middlewareGroups = [
    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:60,1',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

5. 清除缓存并重新测试

有时候配置修改后不会立即生效,执行以下命令清除所有缓存:

php artisan config:clear
php artisan cache:clear
php artisan route:clear

按上面的步骤排查,最常见的问题就是Token传递方式错误或者CORS的supports_credentials未开启,先从这两点入手测试应该能解决401的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:22:48