在 Laravel Passport 中将用户模型主键 ID 更改为另一个

Posted

技术标签:

【中文标题】在 Laravel Passport 中将用户模型主键 ID 更改为另一个【英文标题】:Change USER Model Primary key ID to another in Laravel Passport 【发布时间】:2019-12-18 10:41:41 【问题描述】:

我有一个项目,我在我的 User.php 模型文件中使用以下命令将用户模型主键从“id”更改为“MemberX”:

受保护的 $primaryKey = 'MemberID'

但我的 Passport accessToken 表仍然使用“id”。我想要“MemberX”

身份证

user_id :::::这里我想要 MemberID 而不是 id

client_id 名称 范围 撤销 created_at 更新时间 expires_at

【问题讨论】:

为什么 Passport 表使用什么很重要? (为什么不使用标准的 Laravel 命名约定?) 什么护照表使用它反映在令牌中。令牌包含“id”,我想将主键 id 更改为另一个键 【参考方案1】:

也许您应该检查 laravel/config/auth.php 上的驱动程序是否有 eloquent 而不是 database

'providers' => [
        'users' => [
            'driver' => 'eloquent', //instead of database
            'model' => App\User::class,
        ],

database 使用 DatabaseUserProviderfind 方法仅在 id 列上查找。

eloquent 使用EloquentUserProvider,如果在查看id 之前定义了$primaryKey,find 方法会查看主键。

【讨论】:

【参考方案2】:

将此代码添加到您的User model


   return $this->hasMany(Passport::clientModel(), 'user_id', 'MemberID');

【讨论】:

public function clients() return $this->hasMany(Passport::clientModel(), 'user_id', 'c_pk_user_id');

以上是关于在 Laravel Passport 中将用户模型主键 ID 更改为另一个的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Passport:发送令牌请求时的附加模型条件

[PHP] 自定义 laravel/passport 的误区讲解

Laravel Passport - 保护不同用户类型的路由

Laravel Passport使用Axios 401未认证的API消耗自己的API.

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

Laravel Passport 注册用户凭据不正确