【问题标题】:Laravel 9 - ERROR: Auth guard [ admin] is not definedLaravel 9 - 错误:未定义身份验证保护 [管理员]
【发布时间】:2022-07-19 17:56:16
【问题描述】:

我正在尝试在 Laravel Jetstream 中创建管理员登录。我创建了一个单独的admins 表来存储登录数据。但是,当我尝试通过http://localhost:8000/admin/login 访问管理员登录页面时,我收到一条错误消息Auth guard [ admin] is not defined

我尝试了php artisan config:clearphp artisan config:cache 命令,但没有解决问题。

auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admin::class,
        ],
],

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],

        'admins' => [
            'provider' => 'admins', 
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
],

web.php

Route::get('/', function () {
    return view('welcome');
});

Route::group(['prefix' => 'admin', 'middleware' => ['admin:admin']], function () {
    Route::get('/login', [AdminController::class, 'loginForm']);
    Route::post('/login', [AdminController::class, 'store'])->name('admin.login');
});


Route::middleware(['auth:sanctum, admin', config('jetstream.auth_session'), 'verified'])->group(function () {
    Route::get('/admin/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');
});

Route::middleware(['auth:sanctum, web', config('jetstream.auth_session'), 'verified'])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');
});

管理员控制器

public function loginForm()
{
   return view('auth.login', ['guard' => 'admin']);
}

AdminRidirectIfAuthenticated.php

public function handle(Request $request, Closure $next, ...$guards)
{
    $guards = empty($guards) ? [null] : $guards;
    foreach ($guards as $guard) {
        if (Auth::guard($guard)->check()) {
            return redirect($guard . '/dashboard');
        }
    }
    return $next($request);
}

LoginResponse.php

public function toResponse($request)
{
    return $request->wantsJson()
        ? response()->json(['two_factor' => false])
        : redirect()->intended('admin/dashboard');
}

内核.php

 protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'admin' => \App\Http\Middleware\AdminRedirectIfAuthenticated::class,

        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

FortifyServiceProvider.php

use App\Http\Controllers\AdminController;
use Illuminate\Contracts\Auth\StatefulGuard;
use Illuminate\Support\Facades\Auth;
use App\Actions\Fortify\AttemptToAuthenticate;
use App\Actions\Fortify\RedirectIfTwoFactorAuthenticatable;

public function register()
{
    $this->app->when([AdminController::class, AttemptToAuthenticate::class, RedirectIfTwoFactorAuthenticatable::class])

        ->needs(StatefulGuard::class)
        ->give(function () {
            return Auth::guard('admin');
        });
}

login.blade.php

<form method="POST" action="{{ isset($guard) ? url($guard.'/login') : route('login') }}">
    @csrf
    ..............
</form>

AdminStatefulGuard.php

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Guard;

interface AdminStatefulGuard extends Guard
{
    /**
     * Attempt to authenticate a user using the given credentials.
     *
     * @param  array  $credentials
     * @param  bool  $remember
     * @return bool
     */
    public function attempt(array $credentials = [], $remember = false);

    /**
     * Log a user into the application without sessions or cookies.
     *
     * @param  array  $credentials
     * @return bool
     */
    public function once(array $credentials = []);

    /**
     * Log a user into the application.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  bool  $remember
     * @return void
     */
    public function login(Authenticatable $user, $remember = false);

    /**
     * Log the given user ID into the application.
     *
     * @param  mixed  $id
     * @param  bool  $remember
     * @return \Illuminate\Contracts\Auth\Authenticatable|bool
     */
    public function loginUsingId($id, $remember = false);

    /**
     * Log the given user ID into the application without sessions or cookies.
     *
     * @param  mixed  $id
     * @return \Illuminate\Contracts\Auth\Authenticatable|bool
     */
    public function onceUsingId($id);

    /**
     * Determine if the user was authenticated via "remember me" cookie.
     *
     * @return bool
     */
    public function viaRemember();

    /**
     * Log the user out of the application.
     *
     * @return void
     */
    public function logout();
}

【问题讨论】:

  • 运行命令php artisan config:clear
  • @N69S 我试过了。但它没有用
  • 尝试将'middleware' =&gt; ['admin:admin']更改为'middleware' =&gt; ['auth:admin']
  • 我想这是auth:sanctum, admin这里的空间,请尝试删除它

标签: laravel laravel-livewire laravel-9 jetstream laravel-fortify


【解决方案1】:

去掉web.php中间件参数前的空格

删除 'auth:sanctum, admin' 管理员前面的空格

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2018-05-12
    • 2016-04-19
    • 2015-08-04
    • 2019-06-14
    相关资源
    最近更新 更多