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

使用Laravel Passport调用createToken后出现非对象取'id'属性错误

解决Laravel Passport创建Token时的“Trying to get property 'id' of non-object”错误

这个错误指向很明确——你在自定义的createRequest方法里尝试访问$client->id,但传入的$client并不是一个有效的Laravel\Passport\Client对象(大概率是null或者非预期的类型),才会触发这个属性获取失败的异常。

问题排查与解决方案:

  • 确认$client的来源是否正确
    创建个人访问令牌时,Passport要求使用的是Personal Access Client,而非普通OAuth客户端。你需要检查调用createRequest时传入的$client参数是怎么获取的,确保用正确方式拿到合法的客户端实例:

    // 方法1:通过查询获取个人访问客户端
    $client = \Laravel\Passport\Client::where('personal_access_client', true)->first();
    // 方法2:使用Passport提供的快捷方法
    $client = \Laravel\Passport\Passport::personalAccessClient();
    

    如果获取到的$client是null,说明你还没配置Personal Access Client,需要先执行php artisan passport:client --personal命令生成它。

  • 在createRequest中添加容错校验
    为了避免后续再出现类似问题,建议在方法开头增加类型校验,提前拦截无效参数:

    protected function createRequest($client, $userId, array $scopes) {
        // 校验client是否为合法的Passport Client实例
        if (!$client instanceof \Laravel\Passport\Client) {
            throw new \InvalidArgumentException('必须传入有效的Laravel Passport客户端对象');
        }
    
        return (new ServerRequest)->withParsedBody([
            'grant_type' => 'personal_access',
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'user_id' => $userId,
            'scope' => implode(' ', $scopes),
        ]);
    }
    
  • 额外检查$userId的有效性
    虽然当前错误来自$client->id,也可以顺带确认下$userId是users表中存在的合法ID,避免后续流程出现其他异常。

只要确保传入createRequest的$client是一个存在的、有效的Passport Client对象,这个错误就能彻底解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:11