首页 > 解决方案 > LARAVEL - 使用速率限制中间件时自定义响应标头

问题描述

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

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

在此处输入图像描述

我想自定义此行为并隐藏这些标头,如何轻松找到代码(在框架中),这些标头是哪个集

我的代码:


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

标签: phplaravelrate-limiting

解决方案


假设我们可以创建一个App\Http\Middleware\ThrottleRequests将扩展 original 的新类\Illuminate\Routing\Middleware\ThrottleRequests。并将该方法覆盖getHeaders为您自己的方法,该方法将返回空数组。

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您注册“节流”中间件的属性\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,
        //...
    ];

推荐阅读