laravel中实现多用户认证需为不同角色(如user、admin)配置独立guard、provider及模型,使用tymon/jwt-auth 2.x版本,完成安装、密钥生成、auth.php配置、模型实现jwtsubject接口、分路由与守卫调用。

在 Laravel 中实现多用户认证(比如 User、Admin、Merchant 等不同角色表),使用 tymon/jwt-auth 是成熟可行的方案。关键不是只装包,而是让每个用户类型拥有独立的 guard、provider 和模型适配。以下是当前(2026年)稳定可用的完整流程,适配 Laravel 9/10/11,tymon/jwt-auth 的 dev-develop 或 2.x 版本。
安装 jwt-auth 扩展包
进入项目根目录,执行:
-
composer require tymon/jwt-auth:^2.2(推荐稳定版)或composer require tymon/jwt-auth:dev-develop(如需最新特性) - Laravel 5.5+ 无需手动注册服务提供者,Composer 自动发现;若为旧版本,需在
config/app.php的providers数组中添加:Tymon\JWTAuth\Providers\LaravelServiceProvider::class
发布配置与生成密钥
运行两条命令完成基础配置:
-
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"→ 生成config/jwt.php -
php artisan jwt:secret→ 自动生成JWT_SECRET并写入.env,这是签名 Token 的核心密钥,不可泄露
配置多个认证守卫(guards)和用户提供者(providers)
编辑 config/auth.php,为每类用户定义独立 guard:
- 在
'guards'下新增,例如:
'admin' => [ 'driver' => 'jwt', 'provider' => 'admins' ],<br>'api' => [ 'driver' => 'jwt', 'provider' => 'users' ]
- 在
'providers'下对应新增:
'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class ],<br>'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class ]
确保各模型已存在,并继承 Authenticatable,且实现 JWTSubject 接口(含 getJWTIdentifier() 和 getJWTCustomClaims() 方法)。
创建对应模型与迁移文件
以 Admin 为例:
-
php artisan make:model Models/Admin -m→ 生成模型及迁移 - 在迁移中定义字段(email、password 等),运行
php artisan migrate - 在
App\Models\Admin中实现JWTSubject接口,返回主键作为标识 - 同理处理其他用户模型(如 Merchant、Staff)
路由与控制器分离管理
避免混用,按角色分组路由:
- 在
routes/api.php中用命名空间和前缀隔离:
Route::prefix('admin')->namespace('Api\Admin')->group(function () {<br> Route::post('login', [AdminController::class, 'login']);<br> Route::middleware('auth:admin')->get('dashboard', [AdminController::class, 'dashboard']);<br>});
- 对应控制器中使用
auth('admin')获取守卫实例,调用attempt()、user()、logout()等方法 - 登录成功后返回 Token(通常放在响应头
Authorization: Bearer xxx或响应体中)











