Laravel Auth::guard传sanctum配置报Illegal offset type错误如何修复
Lighthouse有状态认证
Auth::guard()报Illegal offset type错误解答 问题1:直接硬编码传入'web'的修复方式是否正确?
如果你的项目固定使用web作为Sanctum的认证守卫,这种写法可以正常实现功能,不存在运行错误。但这种写法属于硬编码实现,丢弃了配置读取的灵活性,后续如果需要调整Sanctum使用的认证守卫,必须手动修改业务代码,不符合Laravel配置优先的设计规范,不属于最优修复方案。
问题2:如何配置让官方示例代码正常运行?
报错的核心原因是config('sanctum.guard', 'web')返回了非字符串类型值,不符合Auth::guard()方法的参数类型要求,本质是Sanctum配置异常导致,按以下步骤修复即可:
- 发布Sanctum默认配置文件:执行Artisan命令
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider",执行后config目录下会生成sanctum.php配置文件。 - 校验配置项值:打开
config/sanctum.php,找到guard配置项,确认其值为字符串类型的守卫名称,单守卫默认场景下可参考如下配置:
'guard' => 'web',
注意不要将该值设置为数组、null等非字符串类型,否则就会触发参数类型不匹配错误。
- 清理配置缓存:执行
php artisan config:clear清除旧的配置缓存,确保新配置可以被正确读取。
完成以上配置后,官方示例中的$guard = Auth::guard(config('sanctum.guard', 'web'));代码即可正常运行,后续需要切换Sanctum认证守卫时,直接修改sanctum.php中的对应配置即可,无需调整业务代码。
问题涉及运行环境
- laravel: 9.11
- laravel/sanctum: 2.14.1
- lighthouse: 5.50
- laravel-graphql-playground: 2.6
内容的提问来源于stack exchange,提问作者ys64
相关产品推荐
相关产品推荐

