piusadams/superban

一个Laravel扩展包,可以通过IP地址、电子邮件地址或ID禁止用户。

dev-main 2023-12-21 21:34 UTC

This package is auto-updated.

Last update: 2024-09-21 23:10:38 UTC


README

该包提供了一个名为 superban 的中间件,您可以使用它来禁止您的应用程序中的用户。中间件会检查用户是否被禁止,如果是,则抛出 UserBannedException 异常,您可以在 app/Exceptions/Handler.php 文件中捕获该异常并将用户重定向到您选择的页面。

安装

您可以通过Composer安装此包

composer require piusadams/superban

您可以将服务提供者手动添加到 config/app.php 文件中的 providers 数组中

'providers' => [
    // ...
    PiusAdams\SuperBan\Providers\SuperBanServiceProvider::class,
];

发现包:您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="PiusAdams\SuperBan\Providers\SuperBanServiceProvider"  

这是发布配置文件的内容

return [
    'cache_driver' => env('SUPERBAN_CACHE_DRIVER', 'file'),
    'identity_key' => env('SUPERBAN_IDENTITY_KEY', 'ip'),
];

cache_driver 选项是用于存储键的缓存存储。默认是 file,但您可以将其更改为Laravel支持的任何缓存存储。

identity_key 选项是用于识别用户的键。默认是 ip,但您可以将其更改为 emailid,如果用户已登录,中间件将使用用户的电子邮件或ID来识别用户。

工作原理

中间件使用laravel的 RateLimiter 类来计算用户在特定时间段内尝试访问资源的次数。如果用户超出限制,中间件将根据用户的电子邮件、ID或IP地址创建一个键,并将其存储在该时间段的缓存中。然后中间件将在缓存中查找该键,如果找到,则抛出 UserBannedException

示例

superban 中间件接受3个参数

  1. 用户被禁止之前尝试的次数
  2. 用户在禁止之前可以尝试路由的分钟数
  3. 用户被禁止的分钟数
Route::get('/home', 'HomeController@index')->middleware('superban:2,3,5');

在上面的示例中,用户可以在3分钟内尝试访问 /home 路径2次,如果超过限制,将被禁止5分钟。

测试

vendor/bin/phpunit

上面的命令将运行包的测试。

  1. testSuperBanMiddlewareBansUsersAfterTries - 此测试检查中间件在尝试次数超出后是否禁止用户。
  2. testSuperBanMiddlewareLiftsBanAfterBanTime - 此测试检查中间件在禁止时间超出后是否取消禁止。
  3. testSuperBanMiddlewareWorksForMultipleRoutes - 此测试检查中间件是否适用于多个路由。
  4. testSuperBanMiddlewareWorksForMultipleRoutesAndLiftsBanAfterBanTime - 此测试检查中间件是否适用于多个路由,并在禁止时间超出后取消禁止。
  5. testCacheStoreIsSet - 此测试检查是否设置了缓存存储。
  6. testFileCacheStoreIsUsed - 此测试检查是否使用了文件缓存存储。
  7. testSuperBanServiceIsBannedReturnsTrue - 此测试检查当用户被禁止时,SuperBanService 类的 isBanned 方法是否返回true。
  8. testSuperBanServiceIsBannedReturnsFalse - 此测试检查当用户未被禁止时,SuperBanService 类的 isBanned 方法是否返回false。

异常

该包抛出2个异常

  1. UserBannedException - 当用户被禁止时,抛出此异常并返回403状态码。