Auth Guard [:api] 未定义?

HAM*_*MAM 17 php api laravel laravel-passport

当我使用auth:apiGuard 进行注销路由时,我遇到以下异常:

Auth Guard [:api] 未定义

我已经实现了注册/登录 API,但我在使用注销 API 时遇到了此错误,我已使用auth::api.

config/auth.php:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
Run Code Online (Sandbox Code Playgroud)

routes/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');
    });
});
Run Code Online (Sandbox Code Playgroud)

我应该能够注销用户。

pab*_*ros 10

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

'guards' => [
    ...

    // you need to implement this
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => true,
    ],
],
Run Code Online (Sandbox Code Playgroud)


Rem*_*mul 3

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

根据文档

定义路由时可以通过使用 : 分隔中间件名称和参数来指定中间件参数。多个参数应以逗号分隔:

Route::put('post/{id}', function ($id) {
    //
})->middleware('role:editor');
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下它将是:

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');
    });
});
Run Code Online (Sandbox Code Playgroud)