Laravel Passport调用PassportUserProvider时报null参数错误如何解决
问题根因
错误触发的核心原因是当前请求使用**客户端凭证授权(Client Credentials Grant)**生成的令牌,Laravel Passport处理这类令牌时会默认使用clients作为auth provider名称,你现有config/auth.php中未定义对应provider,导致Auth::createUserProvider($config['provider'])返回null,不符合PassportUserProvider构造函数的参数类型要求。
解决方案
根据你的实际使用场景二选一即可:
场景1:当前路由为用户身份校验场景
auth:api中间件默认面向有对应用户实体的授权场景(密码授权、授权码授权等),客户端凭证令牌适用于无用户的服务间通信,不匹配该场景。
- 替换为用户类授权生成的令牌发起请求即可解决
- 服务间通信的路由请使用Passport自带的
client中间件,不要使用auth:api
场景2:确实需要用客户端凭证令牌访问auth:api路由
两种实现方式任选其一:
方式1:补充clients provider配置
在config/auth.php的providers数组中添加对应配置:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 新增如下配置 'clients' => [ 'driver' => 'eloquent', 'model' => Laravel\Passport\Client::class, ], ],
修改完成后执行php artisan config:clear清空配置缓存即可生效。
方式2:强制Passport使用指定provider
在app/Providers/AppServiceProvider.php的boot方法中添加代码,强制Passport使用你配置的users provider:
use Laravel\Passport\Passport; public function boot() { Passport::useUserProvider('users'); }
修改完成后执行php artisan config:clear清空配置缓存即可生效。
内容的提问来源于stack exchange,提问作者Thakgrandka
相关产品推荐
相关产品推荐

