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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:08