我是Laravel和PHP的新手,最近正在阅读一篇教程。首先,他们在app/Http/Controllers/AuthController.php 中声明了auth:api
中间件
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
后来他们在routes/ai.php 中又做了一次
Route::group([
'middleware' => 'api',
'prefix' => 'auth'], function ($router) {
Route::post('/login', [AuthController::class, 'login']);
Route::post('/register', [AuthController::class, 'register']);
...
});
我删除了Route::group
语句,并将路由从中取出
Route::post('/login', [AuthController::class, 'login']);
Route::post('/register', [AuthController::class, 'register']);
...
它仍然有效。
所以我的问题是:
'middleware' => 'api'
中的api
来自哪里?它和auth:api
是一回事吗?但我在Kernel.php中检查了$routeMiddleware
,它没有密钥api
。login
和register
不应该使用任何中间件,但它们包含在路由组中,我可以很好地注册和登录。为什么?难道它不应该因为我没有代币而拒绝我吗?如果我只想在api.php中声明中间件,那么中间件的名称应该是什么?只是
api
可以吗?
我同意这可能会让人感到困惑。
'middleware' => 'api'
指的是位于Kernel.php
中稍靠下的$middlewareGroups
数组条目
'api' => [
'throttle:240,1',
'bindings',
],
它与身份验证保护auth:api
不同,请参阅此处。
但是,您可能仍然应该在
login
和register
路由上安装这些中间件,以节流并执行路由模型绑定。您可以使用任何适合您的身份验证机制的中间件。对于Passport,这是
auth:api
,我认为它是用于Sanctum的auth:sanctum
,如果您使用内置的,我认为是web
。你可以随心所欲地命名这些;它们在CCD_ 20中被定义。