URLimitValidator.php 1004 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Module\Ulogic\Validator;
  3. use UCore\Validator;
  4. /**
  5. * 用户redis,请求限制
  6. *
  7. */
  8. class URLimitValidator extends Validator
  9. {
  10. public function validate(mixed $value, array $data): bool
  11. {
  12. $validation_class = get_class($this->validation);
  13. $s = $this->args['s'] ?? 2;
  14. $res = self::check($value,$validation_class, $s);
  15. if (!$res) {
  16. $this->validation->addError('', '请求频率过快,' . $s . '秒1次');
  17. }
  18. return $res;
  19. }
  20. /**
  21. * 限流检查
  22. * @param $user_id
  23. * @param $validation_class
  24. * @param $s
  25. * @return bool
  26. */
  27. public static function check($user_id,$validation_class,$s)
  28. {
  29. $key = "user-redislimit-$validation_class-$user_id-$s";
  30. $old = \Illuminate\Support\Facades\Cache::increment($key,1);
  31. \Illuminate\Support\Facades\Cache::set($key,$old,$s);
  32. if($old === 1){
  33. return true;
  34. }
  35. return false;
  36. }
  37. }