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

Laravel与API Platform集成时Sanctum认证失败问题排查

问题描述

我正在尝试使用全新的Laravel API Platform集成。我有一个运行在Laravel Herd上的Jetstream/Sanctum应用,配置如下:

.env 配置

APP_URL=https://api.immo.test
SANCTUM_STATEFUL_DOMAINS=api.immo.test
SESSION_DOMAIN=.immo.test

config/api-platform.php 配置

'defaults' => [
    'route_prefix' => '/api',
    'middleware' => ['auth:sanctum'],
],

模型定义

#[ApiResource]
class Property extends Model

OpenAPI文档可正常访问(地址:https://api.immo.test/api/),但调用/api/properties这类资源路由时始终出现认证错误,通过Laravel Telescope查看发现用户身份无法被识别。异常追踪片段如下:

{
  "trace": [
    {
      "file": "/Volumes/Work/Code/imapi/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
      "line": 88,
      "function": "unauthenticated",
      "class": "Illuminate\\Auth\\Middleware\\Authenticate",
      "type": "->"
    },
    {
      "file": "/Volumes/Work/Code/imapi/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
      "line": 62,
      "function": "authenticate",
      "class": "Illuminate\\Auth\\Middleware\\Authenticate",
      "type": "->"
    },
    {
      "file": "/Volumes/Work/Code/imapi/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
      "line": 183,
      "function": "handle",
      "class": "Illuminate\\Auth\\Middleware\\Authenticate",
      "type": "->"
    },
    {
      "file": "/Volumes/Work/Code/imapi/vendor/api-platform/laravel/ApiPlatformMiddleware.php",
      "line": 47,
      "function": "Illuminate\\Pipeline\\{closure}",
      "class": "Illuminate\\Pipeline\\Pipeline",
      "type": "->"
    },
    ...
  ],
  "type": "/errors/401",
  "title": "An error occurred",
  "status": 401,
  "detail": "Unauthenticated."
}

我的其他基于Sanctum的应用路由可正常工作,例如:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('user', fn () => request()->user());
});
解决方法
  • 检查API Platform中间件顺序:确保auth:sanctum中间件在API Platform核心中间件之前执行。可在config/api-platform.php中调整全局中间件顺序,或在模型的#[ApiResource]注解里明确指定中间件优先级。
  • 确认认证头传递正确:调用API时必须携带Authorization: Bearer {token}请求头,且token有效。在API Platform的OpenUI文档页面,需配置Bearer token认证方式,否则测试请求不会自动携带token。
  • 检查模型注解的中间件覆盖:如果#[ApiResource]注解单独指定了中间件,会覆盖全局配置。需确保注解中的中间件配置包含auth:sanctum,示例:
    #[ApiResource(middleware: ['auth:sanctum'])]
    
  • 清除配置缓存:执行以下命令确保最新配置生效:
    php artisan config:clear
    php artisan route:clear
    
  • 验证Sanctum状态域配置:尝试将SANCTUM_STATEFUL_DOMAINS设置为.immo.test,覆盖整个域名后缀,避免子域名匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:00:10