要回答您的上述问题,了解 laravel 的基本身份验证系统以及中间件的工作原理是非常重要的。
简而言之,auth 是一个中间件,首先定义在 App\Http\Kernel 中,然后 api 是传递给中间件的守卫。 api配置可以在config/auth.php中找到
api 是用于所有 api 路由的中间件,这意味着这些路由不能通过在 url bar 中使用来访问
在你的情况下
Route::group(['middleware' => ['auth:api']], function(){
Route::post('getList','SomeController@someAction')->name('logout');
});
表示您正在为 API 加载身份验证。这意味着您将根据令牌而不是用户会话对用户进行身份验证。这样,您将无法使用浏览器上的链接 url 访问网站。因此,首先您定义了要使用身份验证“auth”,然后声明要在身份验证上使用 api 保护。 auth 的 API 保护在 config/auth.php 中定义
接下来的事情
Route::group(['middleware' => ['auth','api']], function(){
Route::post('getList','SomeController@someAction')->name('logout');
});
在上述问题上,您根据您在 HTTP/Kernel.php 中提到的名称对中间件进行分组
['middleware' => ['auth','api']
这意味着您的所有路由都通过名为 auth 和 api 的中间件。
所以你的 HTTP/Kernal.php 中可能有这个
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
这意味着您将 auth 和 api 组合在同一个中间件中,用于您在其下定义的所有路由。