Auth guard [:api] 未定义?

Auth guard [:api] is not defined?

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

Auth guard [:api] 未定义

我已经实现了注册登录 Apis,但是我在注销 api 时遇到了这个错误,我使用 auth::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');
    });
});

我应该可以注销用户

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

根据 docs:

Middleware parameters may be specified when defining the route by separating the middleware name and parameters with a :. Multiple parameters should be delimited by commas:

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');
    });
});

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

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

进入这个

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

如果您正在使用 Laravel 9+Passport,您需要在 config/auth.php 文件的 guard 数组中实现:

'guards' => [
    ...

    // you need to implement this
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => true,
    ],
],