piusadams / superban
一个Laravel扩展包,可以通过IP地址、电子邮件地址或ID禁止用户。
dev-main
2023-12-21 21:34 UTC
Requires
- php: ^8.1
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0
- pestphp/pest: ^2.28
- pestphp/pest-plugin-laravel: ^2.2
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
,但您可以将其更改为 email
或 id
,如果用户已登录,中间件将使用用户的电子邮件或ID来识别用户。
工作原理
中间件使用laravel的 RateLimiter
类来计算用户在特定时间段内尝试访问资源的次数。如果用户超出限制,中间件将根据用户的电子邮件、ID或IP地址创建一个键,并将其存储在该时间段的缓存中。然后中间件将在缓存中查找该键,如果找到,则抛出 UserBannedException
。
示例
superban
中间件接受3个参数
- 用户被禁止之前尝试的次数
- 用户在禁止之前可以尝试路由的分钟数
- 用户被禁止的分钟数
Route::get('/home', 'HomeController@index')->middleware('superban:2,3,5');
在上面的示例中,用户可以在3分钟内尝试访问 /home
路径2次,如果超过限制,将被禁止5分钟。
测试
vendor/bin/phpunit
上面的命令将运行包的测试。
testSuperBanMiddlewareBansUsersAfterTries
- 此测试检查中间件在尝试次数超出后是否禁止用户。testSuperBanMiddlewareLiftsBanAfterBanTime
- 此测试检查中间件在禁止时间超出后是否取消禁止。testSuperBanMiddlewareWorksForMultipleRoutes
- 此测试检查中间件是否适用于多个路由。testSuperBanMiddlewareWorksForMultipleRoutesAndLiftsBanAfterBanTime
- 此测试检查中间件是否适用于多个路由,并在禁止时间超出后取消禁止。testCacheStoreIsSet
- 此测试检查是否设置了缓存存储。testFileCacheStoreIsUsed
- 此测试检查是否使用了文件缓存存储。testSuperBanServiceIsBannedReturnsTrue
- 此测试检查当用户被禁止时,SuperBanService
类的isBanned
方法是否返回true。testSuperBanServiceIsBannedReturnsFalse
- 此测试检查当用户未被禁止时,SuperBanService
类的isBanned
方法是否返回false。
异常
该包抛出2个异常
UserBannedException
- 当用户被禁止时,抛出此异常并返回403状态码。