musti/rate-policy

Laravel速率限制策略

1.0.0 2023-01-18 09:06 UTC

This package is auto-updated.

Last update: 2024-09-29 01:27:55 UTC


README

Generic badge

描述

此包是为了娱乐而创建的,它实际上并没有任何实用性,因为这更多的是为了学习如何为Laravel创建包。它为控制器创建了速率限制,就像你在Laravel中创建策略一样,它是通过用户IP来实现的。同时也使得处理控制器的速率限制变得更加容易。

安装

通过composer安装

 composer require musti/rate-policy

用法

首先,您需要将RateLimitRequests特性添加到基础控制器

use Musti\RatePolicy\Traits\RateLimitRequests;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests, RateLimitRequests;
}

然后通过命令创建策略

 php artisan make:rate-policy {name}

这将创建app/RatePolicies下的RatePolicy

请记住将protected $controller = Controller::class;更改为所需的控制器

在任何控制器中,将此代码添加到构造函数中

use Musti\RatePolicy\RatePolicy;

class ChannelController extends Controller
{
    public function __construct(Request $request)
    {
        $this->applyRatePolicy(ChannelRatePolicy::class);
    }
}

在您创建的RatePolicy中,可以为控制器index方法添加一个方法,如下所示

<?php
namespace App\RatePolicies;

use App\Http\Controllers\ChannelController;
use Musti\RatePolicy\RateLimits;

class ChannelRatePolicy extends RateLimits
{
    protected $controller = ChannelController::class;

    protected function message() {
        //Do something

        return response()->json([
            'message' => 'Too many requests',
        ], 429);
    }
}

该方法必须返回一个响应。

默认情况下,最大尝试次数设置为10

要更改最大尝试次数,只需在RatePolicy中添加一个$maxAttempts属性

protected $maxAttempts = 10;

您还可以通过提供一个$rateLimitForMethods属性来更改特定方法的最大尝试次数

    protected $rateLimitForMethods = [
        'index' => 15, //index method is automatically translated to viewAny
        'store' => 5,
    ];

如果RatePolicy可以找到控制器中的相应方法,则它将仅工作。

资源

就像Laravel策略一样,速率策略将被映射到相应的控制器方法