IpWhitelist.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\DataApiNew\Models\AgentApi;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use Vinkla\Hashids\Facades\Hashids;
  7. class IpWhitelist
  8. {
  9. /**
  10. * @param \Illuminate\Http\Request $request
  11. * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
  12. * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
  13. */
  14. public function handle(Request $request, Closure $next)
  15. {
  16. $user_key = $request->input('user_key');
  17. $user_id = data_get(Hashids::decode($user_key), '0');
  18. if (!$user_id) {
  19. return error('无效的用户密钥');
  20. }
  21. // 白名单 IP 列表
  22. $whitelist = AgentApi::where('user_id', $user_id)->value('ip_whitelist');
  23. $whitelistArr = array_map('trim', explode("\n", $whitelist));
  24. // 获取客户端的 IP 地址
  25. $clientIp = $request->getClientIp();
  26. if (!in_array($clientIp, $whitelistArr)) {
  27. return error('IP未加入白名单');
  28. }
  29. return $next($request);
  30. }
  31. }