Laravel+Inertia+Vue3中Inertia::share的Auth闭包未执行问题
其他服务提供者覆盖了auth共享配置
Laravel的Breeze、Jetstream这类Inertia脚手架默认会在InertiaServiceProvider中通过Inertia::share传递完整的用户模型。如果你的AppServiceProvider的boot方法执行顺序早于InertiaServiceProvider,后者的共享配置会直接覆盖你定义的auth闭包。
解决方法:- 将你的auth共享逻辑移到
InertiaServiceProvider中,替换默认的auth配置; - 或在
config/app.php里调整服务提供者顺序,把App\Providers\AppServiceProvider放在App\Providers\InertiaServiceProvider之后。
- 将你的auth共享逻辑移到
闭包定义存在语法/上下文问题
检查AppServiceProvider中的代码是否存在上下文错误,比如错误使用箭头函数导致无法正确获取auth()实例。
错误示例(箭头函数在部分PHP版本中可能存在上下文绑定问题):Inertia::share('auth', fn() => [ 'user' => auth()->user()?->only(['id', 'name']) ]);改用普通闭包的正确写法:
Inertia::share('auth', function () { return [ 'user' => auth()->user() ? auth()->user()->only(['id', 'name']) : null, ]; });配置缓存未更新
如果之前执行过php artisan config:cache,服务提供者的代码变更不会生效,旧的缓存配置仍在运行。
解决方法:执行以下命令清除缓存后重启服务:php artisan config:clear php artisan cache:clearInertia中间件存在自定义共享逻辑
检查App\Http\Middleware\HandleInertiaRequests中间件的share方法,若里面手动添加了auth用户的共享代码,会直接覆盖服务提供者中的配置。修改该方法里的auth返回字段即可。
内容的提问来源于stack exchange,提问作者anggor
相关产品推荐
相关产品推荐

