Rya*_*ski 2 php rate-limiting laravel http-status-code-429
我试图oauth/token在 Laravel 5.8 中禁用 Passport 内置端点的速率限制,我认为只需从 api 中删除油门中间件就可以做到:
'api' => [
// 'throttle:60,1',
'bindings',
],
Run Code Online (Sandbox Code Playgroud)
但是,尽管这有效地禁用了我在 api 路由文件中定义的每个端点的速率限制,但它并没有这样做/oauth/token,就好像 Passport 有默认的节流设置一样。所以我只是AppServiceProvider用一个荒谬的数字添加了该路由的油门中间件:
\Route::group(['middleware' => ['custom_provider', 'throttle:999999999,1']], function () {
Passport::routes();
});
Run Code Online (Sandbox Code Playgroud)
但是当我测试这个时,由于某种原因,在几次请求后我仍然收到 429 错误:
429 Too Many Requests
X-RateLimit-Limit ?9999999999
X-RateLimit-Remaining ?9999999935
x-ratelimit-reset ?1567108098
Run Code Online (Sandbox Code Playgroud)
所以我宁愿完全禁用它。任何想法如何专门为 Passport 路线禁用它?
那是因为护照不使用api中间件,而是throttle直接在该路线上使用的中间件。
您可以在源代码中看到:
// This is how passport register that route
$this->router->post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
Run Code Online (Sandbox Code Playgroud)
在护照注册他的路线之前,您可以覆盖自己定义的路线。要做到这一点,我认为最方便的方法是连接到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();
});
Run Code Online (Sandbox Code Playgroud)
请注意,如果您需要所有护照路线,您也可以这样做:
Passport::routes(function ($router) {
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
$router->all();
});
Run Code Online (Sandbox Code Playgroud)
您可以通过php artisan route:list在项目根目录下的控制台窗口中检查路由是否已正确注册