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

如何在dusterio/lumen-passport生成的JWT Payload中添加自定义数据

dusterio/lumen-passport / laravel/passport 新增JWT自定义Payload字段方案

实现原理

Passport 底层基于 league/oauth2-server 实现OAuth2逻辑,我们可以通过替换默认的访问令牌仓库,在生成令牌环节注入自定义声明字段,直接写入JWT的Payload中,不需要修改原有生成token的业务代码。


具体操作步骤

  • 步骤1:创建自定义访问令牌仓库类
    新建 app/Repositories/CustomAccessTokenRepository.php 文件,代码如下:

    <?php
    
    namespace App\Repositories;
    
    use Laravel\Passport\Bridge\AccessTokenRepository as BaseRepository;
    use League\OAuth2\Server\Entities\ClientEntityInterface;
    
    class CustomAccessTokenRepository extends BaseRepository
    {
        public function getNewToken(ClientEntityInterface $clientEntity, array $scopes, $userIdentifier = null)
        {
            $accessToken = parent::getNewToken($clientEntity, $scopes, $userIdentifier);
            
            // 新增自定义Payload字段
            $accessToken->addClaim('custom_data', 'this is a custom data.');
            
            // 如需动态读取用户属性,可通过$userIdentifier查询用户模型后赋值
            // $user = \App\Models\User::find($userIdentifier);
            // $accessToken->addClaim('user_nickname', $user->nickname);
            // $accessToken->addClaim('client_ip', request()->ip());
    
            return $accessToken;
        }
    }
    
  • 步骤2:替换容器中的默认仓库绑定
    在 app/Providers/AuthServiceProvider.php 的 register 方法中添加绑定逻辑,覆盖原生的令牌仓库实现:

    public function register()
    {
        $this->app->bind(
            \League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface::class,
            \App\Repositories\CustomAccessTokenRepository::class
        );
    }
    

    如果是Lumen框架没有AuthServiceProvider,也可以直接在 bootstrap/app.php 中添加上述绑定代码。

  • 步骤3:验证效果
    调用原有密码授权接口生成新的token,解码后即可看到Payload中已经存在新增的custom_data字段,原有业务逻辑无需修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:03