我试图在Laravel 5.8中禁用Passport内置oauth/token
端点的速率限制,我发现只需从api中删除节流中间件就可以做到:
'api' => [
// 'throttle:60,1',
'bindings',
],
但是,尽管这有效地禁用了我在我的api路由文件中定义的每个端点的速率限制,但对于/oauth/token
却没有这样做,就像Passport具有默认的限制设置一样。因此,我刚刚在AppServiceProvider
中为该路线添加了油门中间件,并加上了一个荒谬的数字:
\Route::group(['middleware' => ['custom_provider', 'throttle:999999999,1']], function () {
Passport::routes();
});
但是,当我对此进行测试时,由于某些原因,在经过几次请求后仍然出现429个错误:
429 Too Many Requests
X-RateLimit-Limit →9999999999
X-RateLimit-Remaining →9999999935
x-ratelimit-reset →1567108098
所以我宁愿完全禁用它。有什么想法如何专门针对Passport路由禁用它吗?
答案 0 :(得分:1)
这是因为护照不使用api
中间件,而是直接在该路由上使用throttle
一个中间件。
您可以在source code中看到它:
// This is how passport register that route
$this->router->post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
您可以在护照注册他的路线之前覆盖该路线并自行定义。为此,我认为最方便的方法是使用Passport::routes()
方法:
Passport::routes(function ($router) {
$router->forAuthorization();
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
// This function would trigger the internal /token route registration
$router->forAccessTokens();
$router->forTransientTokens();
$router->forClients();
$router->forPersonalAccessTokens();
});
请注意,如果您需要所有护照路线,也可以这样做:
Passport::routes(function ($router) {
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
$router->all();
});
您可以通过从项目根目录在控制台窗口中执行php artisan route:list
来检查路由是否已正确注册