当我使用
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');
});
});
我应该能够注销用户。
如果您使用
Laravel 9+
和 Passport
,则需要在 guard
文件的 config/auth.php
数组内实现此功能:
'guards' => [
...
// you need to implement this
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => true,
],
],
你的代码中有一个额外的冒号,这就是为什么它试图找到守卫
: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');
});
});
我遇到了同样的问题,似乎我忘记更改身份验证默认值 所以在 config/auth.php 中改变这个
'defaults' => [
'guard' => 'web',
....
],
进入这个
'defaults' => [
'guard' => 'api',
....
],