如何修改Laravel Passport以使用自定义employee表替代默认users表
配置步骤
1. 调整Employee模型
首先确保你的Employee模型继承Laravel的认证基类,同时引入Passport的Api Token Trait,显式指定对应表名:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; // 必须引入Passport的trait class Employee extends Authenticatable { use HasApiTokens; protected $table = 'employee'; // 显式指定表名 // 如果表主键不是id,新增下面一行,替换为实际主键字段 // protected $primaryKey = 'emp_id'; // 配置可批量赋值字段,替换为employee表的实际字段 protected $fillable = [ 'name', 'email', 'password', ]; // 隐藏敏感字段 protected $hidden = [ 'password', 'remember_token', ]; // 如果你的密码字段不是password,新增下面方法重写认证字段 // public function getAuthPassword() // { // return $this->emp_pwd; // } }
2. 修改认证配置
打开config/auth.php文件,修改两处核心配置:
- 调整用户提供者配置,把默认关联的模型替换为Employee
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\Employee::class, // 替换为你的Employee模型实际路径 ], // 也可以单独新增employee专属提供者,后续把guard的provider指向它即可 /* 'employees' => [ 'driver' => 'eloquent', 'model' => App\Models\Employee::class, ], */ ],
- 调整api guard的驱动和关联提供者
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', // 确保驱动为passport 'provider' => 'users', // 如果单独新增了employees提供者,这里填employees 'hash' => false, ], ],
3. 配置Passport使用自定义用户模型
打开app/Providers/AuthServiceProvider.php,在boot方法中添加Passport用户模型指定:
use Laravel\Passport\Passport; use App\Models\Employee; public function boot() { $this->registerPolicies(); // 新增这行,指定Passport用Employee模型完成认证逻辑 Passport::useUserModel(Employee::class); // 原有Passport配置(如令牌过期时间等)无需修改 }
4. 适配登录逻辑
如果你的employee表的登录用户名字段不是email,只需要修改现有登录代码里Auth::attempt的数组键名即可,比如用工号emp_no登录就改成:
if(Auth::attempt(['emp_no' => request('emp_no'), 'password' => request('password')])){ // 原有生成token、返回响应的逻辑完全不用修改 }
5. 生效配置
执行命令清理配置缓存即可:
php artisan config:clear
内容的提问来源于stack exchange,提问作者Eggy
相关产品推荐
相关产品推荐

