Laravel Jetstream多用户源场景下如何为不同用户配置独立登录路由
Laravel Jetstream 双用户模型独立登录配置方案
前置准备:更新auth认证配置
先在config/auth.php中新增两类用户的认证提供者和守卫:
- 在
providers数组下新增:
'original_users' => [ 'driver' => 'eloquent', 'model' => App\Models\OriginalUser::class, ], 'portal_users' => [ 'driver' => 'eloquent', 'model' => App\Models\PortalUser::class, ],
- 在
guards数组下新增:
'original' => [ 'driver' => 'session', 'provider' => 'original_users', ], 'portal' => [ 'driver' => 'session', 'provider' => 'portal_users', ],
1. 创建独立登录控制器
分别创建两类用户的登录控制器,继承Jetstream默认的逻辑框架,仅修改守卫指定逻辑即可:
OriginalUser 登录控制器 app/Http/Controllers/Auth/OriginalLoginController.php
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Http\Requests\Auth\LoginRequest; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\View\View; class OriginalLoginController extends Controller { public function create(): View { return view('auth.original-login'); } public function store(LoginRequest $request): RedirectResponse { // 指定使用original守卫认证 $request->authenticate('original'); $request->session()->regenerate(); // 替换为OriginalUser登录后的跳转路径 return redirect()->intended('/original/dashboard'); } public function destroy(Request $request): RedirectResponse { Auth::guard('original')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/original/login'); } }
PortalUser 登录控制器 app/Http/Controllers/Auth/PortalLoginController.php
和上述逻辑一致,仅把守卫名称替换为portal,视图、跳转路径对应修改即可。
2. 配置独立访问路由
在routes/web.php中新增两类用户的专属路由,不需要启用Jetstream默认的auth路由:
use App\Http\Controllers\Auth\OriginalLoginController; use App\Http\Controllers\Auth\PortalLoginController; // OriginalUser 登录路由 Route::get('/original/login', [OriginalLoginController::class, 'create'])->name('original.login'); Route::post('/original/login', [OriginalLoginController::class, 'store'])->middleware('guest:original'); Route::post('/original/logout', [OriginalLoginController::class, 'destroy'])->name('original.logout')->middleware('auth:original'); // PortalUser 登录路由 Route::get('/portal/login', [PortalLoginController::class, 'create'])->name('portal.login'); Route::post('/portal/login', [PortalLoginController::class, 'store'])->middleware('guest:portal'); Route::post('/portal/logout', [PortalLoginController::class, 'destroy'])->name('portal.logout')->middleware('auth:portal');
3. 调整Jetstream服务提供者配置
打开app/Providers/JetstreamServiceProvider.php,修改boot方法内容,关闭Jetstream默认的身份验证路由注册,同时指定自定义的守卫适配逻辑:
public function boot() { $this->configurePermissions(); // 注释掉默认的路由注册代码 // Jetstream::routes(); // 注册两类用户的密码重置、邮箱验证等附加功能的守卫适配 Jetstream::authSessionMiddleware(['auth:original', 'auth:portal']); // 若不需要Jetstream自带的其他功能(如双因素认证、团队功能)可调用Jetstream::ignoreRoutes()完全关闭默认路由注册 }
4. 补充对应视图文件
根据控制器中指定的视图路径,分别创建original-login.blade.php和portal-login.blade.php,表单提交地址对应到各自的POST登录路由即可。
内容的提问来源于stack exchange,提问作者Nikita Cunskis
相关产品推荐
相关产品推荐

