学习产出:
- 短信接口防盗刷是一个常见的需求,在 Laravel 框架中可以通过中间件和缓存来实现
- 创建中间件 在 Laravel 中,可以通过
php artisan make:middleware
命令来创建中间件。在命令行中输入以下命令:php artisan make:middleware SmsThrottle
- 该命令会在
app/Http/Middleware
目录下创建一个SmsThrottle
中间件文件。打开该文件,修改handle()
方法如下:
public function handle($request, Closure $next)
{
$phone = $request->phone; // 获取手机号码
$ip = $request->ip(); // 获取客户端 IP 地址
$key = 'sms:' . $phone . ':' . $ip; // 生成缓存键名
$count = Cache::get($key, 0); // 从缓存中获取已发送短信数量
$maxAttempts = 5; // 最大尝试次数
$decayMinutes = 1; // 时间间隔(单位:分钟)
$response = response()->json([
'code' => 400,
'message' => '操作频繁,请稍后再试'
], 400); // 定义响应内容
if ($count >= $maxAttempts) {
return $response; // 达到最大尝试次数,返回响应
}
Cache::add($key, $count + 1, $decayMinutes); // 记录本次发送短信
return $next($request); // 继续执行下一个中间件
}
- 以上代码实现了一个简单的短信接口防盗刷中间件。该中间件会根据请求中的手机号码和客户端 IP 地址生成一个缓存键名,然后从缓存中获取已发送短信数量。如果已发送短信数量超过了最大尝试次数,则返回一个响应,否则记录本次发送短信,并继续执行下一个中间件。
- 注册中间件 在 Laravel 中,可以使用中间件别名来注册中间件。在
app/Http/Kernel.php
文件中,找到$routeMiddleware
数组,添加以下代码:- 'sms.throttle' => \App\Http\Middleware\SmsThrottle::class,
- 以上代码将
SmsThrottle
中间件注册为sms.throttle
别名。
- 使用中间件 在需要进行短信接口防盗刷的路由中,可以使用
middleware
方法来指定中间件。例如:- Route::post('/api/send-sms', function (Request $request) { // 发送短信接口逻辑 })->middleware('sms.throttle');
以上代码指定了
sms.throttle
中间件,该中间件会在请求到达该路由之前先进行判断,如果已发送短信数量超过了最大尝试次数,则直接返回响应,否则继续执行发送短信接口逻辑。 通过以上步骤,我们就可以在 Laravel 框架中实现短信接口防盗刷的功能了。需要注意的是,以上代码仅为示例代码,实际应用中还需要根据具体情况进行修改和完善。