Auth Guard [:api] 未定义?

问题描述 投票:0回答:3

当我使用

auth:api
防护来注销路由时,我面临以下异常:

Auth Guard [:api] 未定义

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

auth::api
对其进行了保护。

config/auth.php

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

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

我应该能够注销用户。

php laravel laravel-passport
3个回答
10
投票

如果您使用

Laravel 9+
Passport
,则需要在
guard
文件的
config/auth.php
数组内实现此功能:

'guards' => [
    ...

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

3
投票

你的代码中有一个额外的冒号,这就是为什么它试图找到守卫

:api

根据文档

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

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

1
投票

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

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

进入这个

    'defaults' => [
        'guard' => 'api',
        ....
    ],
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.