Auth guard [:api] 没有定义?

Posted

技术标签:

【中文标题】Auth guard [:api] 没有定义?【英文标题】:Auth guard [:api] is not defined? 【发布时间】:2020-02-15 15:29:23 【问题描述】:

当我使用 auth api gaurd 进行注销路由时。我面临以下异常

身份验证保护 [:api] 未定义

我已经实现了注册登录 API,但是我在使用 auth::api 保护的注销 API 时遇到了这个错误

config.auth 文件



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

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

api.php


Route::group(['prefix'=>'auth'],function()

    Route::post('login','AuthController@login');
    Route::post('signup','AuthController@signup');

    Route::group(['middleware' => 'auth::api'], function () 
            Route::get('logout','AuthController@logout');
            Route::get('user','AuthController@user');
    );
);

我应该可以注销用户

【问题讨论】:

auth::api 不正确,去掉一个冒号auth:api 【参考方案1】:

我遇到了同样的问题,好像我忘记更改身份验证默认值了 所以在 config/auth.php 中改变这个

    'defaults' => [
        'guard' => 'web',
        ....
    ],

进入这个

    'defaults' => [
        'guard' => 'api',
        ....
    ],

【讨论】:

【参考方案2】:

你的代码中有一个额外的冒号,这就是它试图找到守卫:api的原因。

根据docs:

定义路由时可以指定中间件参数 用 : 分隔中间件名称和参数。多种的 参数应该用逗号分隔:

Route::put('post/id', function ($id) 
    //
)->middleware('role:editor');

所以你的情况是:

Route::group(['prefix' => 'auth'], function () 
    Route::post('login','AuthController@login');
    Route::post('signup','AuthController@signup');

    Route::group(['middleware' => 'auth:api'], function () 
        Route::get('logout','AuthController@logout');
        Route::get('user','AuthController@user');
    );
);

【讨论】:

以上是关于Auth guard [:api] 没有定义?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 说 Auth guard [] 没有定义

未定义身份验证驱动程序 [api]

Laravel 8 门不适用于 Auth::guard

在 laravel 8 中创建 auth guard 使用中间件

call_user_func_array() 期望参数 1 是一个有效的回调,类 'Illuminate\Auth\Guard' 没有方法 'attemp' - Laravel 中的 Auth

身份验证用户提供程序 [passport] 未使用 laravel 护照定义