📜  auth guard (admin) 未定义 laravel 8 - PHP (1)

📅  最后修改于: 2023-12-03 14:39:23.915000             🧑  作者: Mango

Auth Guard (Admin) 未定义 Laravel 8 - PHP

问题描述

在 Laravel 8 中,若尝试使用 auth 中间件保护某个路由时,可能会遭遇到类似以下的错误提示:

InvalidArgumentException
Auth guard [admin] is not defined.

这是由于在 config/auth.php 配置文件中未定义名为 admin 的身份验证卫士(guard)。如下所示:

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

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
解决方法

解决此问题,需要在 config/auth.php 配置文件中的 guards 中添加名为 admin 的 guard,和一个对应的 provider(提供者),并确保 provider 中指定的模型存在。

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

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

// ...

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

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],
示例代码
// app/Http/Controllers/AdminController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

class AdminController extends Controller
{
    public function index()
    {
        if (Auth::guard('admin')->check()) {
            // do something
        }

        // ...
    }
}
// routes/web.php

use App\Http\Controllers\AdminController;

Route::get('/admin', [AdminController::class, 'index'])
    ->middleware('auth:admin');
总结

以上就是解决 Laravel 8 auth guard (admin) 未定义 错误的方法。在使用 auth 中间件时,确保在 config/auth.php 中定义了相关 guard 和 provider。