musti / rate-policy
Laravel速率限制策略
1.0.0
2023-01-18 09:06 UTC
README
描述
此包是为了娱乐而创建的,它实际上并没有任何实用性,因为这更多的是为了学习如何为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策略一样,速率策略将被映射到相应的控制器方法