LARAVEL - 使用速率限制中间件时自定义响应 headers

LARAVEL - Customize response headers when using rate limiting middleware

我正在 laravel8 中开发一个项目(还是新的),我想隐藏一些 自定义响应 headers (以 x- 开头)如:

X-RateLimit-Limit: 15
X-RateLimit-Remaining: 14

我想自定义此行为并隐藏这些 headers,我怎样才能轻松找到代码(在框架中),其中设置了这些 headers

我的代码:


    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(15);
        });
    }

假设我们可以创建一个新的 App\Http\Middleware\ThrottleRequests class 来扩展原始的 \Illuminate\Routing\Middleware\ThrottleRequests。并将方法 getHeaders 重写为您自己的方法,这将 return 空数组。

namespace App\Http\Middleware;

use Illuminate\Routing\Middleware\ThrottleRequests as OriginalThrottleRequests;

/**
...
 */
class ThrottleRequests extends OriginalThrottleRequests
{
    /**
     * @inheritdoc
     */
    protected function getHeaders($maxAttempts, $remainingAttempts, $retryAfter = null)
    {
        return [];
    }
}

然后您需要做的就是更改 app/Http/Kernel.php 文件中的中间件定义。 属性 $routeMiddleware 你在哪里注册 'throttle' 中间件 \Illuminate\Routing\Middleware\ThrottleRequests::class 你可以更改为你自己的实现 \App\Http\Middleware\ThrottleRequests::class.

在我的例子中是:

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        //...
        'throttle' => \App\Http\Middleware\ThrottleRequests::class,
        //...
    ];