对于中间件 bindings,api.throttle,api.auth 的困惑
路由文件中( routes/api.php )一共使用了三次个中间件bindings, api.throttle, api.auth。
Kernel 文件中定义的API 中间件组中只有throttle和bindings,为什么调用时是 'middleware' => 'bindings'/ 'middleware' => 'api.throttle'?为何不是 'middleware' => 'api.bindings'(报错),'middleware' => 'throttle'(不报错)
api.auth 在API 中间件组中并未定义,为什么还能使用?
app/Http/Kernel.php
.
.
.
// 定义中间件组
protected $middlewareGroups = [
// Web 中间件组,应用于 routes/web.php 路由文件
'web' => [
.
.
.
],
// API 中间件组,应用于 routes/api.php 路由文件
'api' => [
// 使用别名来调用中间件
// 请见:https://learnku.com/docs/laravel/5.5/middleware#为路由分配中间件
'throttle:60,1',
'bindings'
],
];
routes/api.php
$api->version('v1', [
'namespace' => 'App\Http\Controllers\Api',
'middleware' => 'bindings'
], function($api) {
$api->group([
'middleware' => 'api.throttle',
'limit' => config('api.rate_limits.sign.limit'),
'expires' => config('api.rate_limits.sign.expires')
], function($api){
.
.
.
// 需要 token 验证的接口
$api->group(['middleware' => 'api.auth'], function($api) {
.
.
.
});
});
});
关于 LearnKu
因为使用了 dingo,kernel 中定义的 api 组其实是没用的,所以需要单独再定义一遍。
所以如果用 dingo 只以 路由文件中的中间件为准。
api.auth 扩展包加载的时候 通过 provider 注册进去的。
@liyu001989 'middleware' => 'bindings' ,'middleware' => 'api.throttle','middleware' => 'api.auth',这三个都不是用的kernel中的中间件?bindings应该是用到了 kernel中 中间件了吧?api.throttle'和api.auth这两个中间件又是从什么地方定义的呢?
vendor/dingo/api/src/Provider/LaravelServiceProvider.php
@liyu001989 明白了,谢谢李哥
@liyu001989 通过你的截图来看,
bindings就是用的默认的api的中间件吧?