Как проверить доступ к проекту Laravel по IP-адресу
Доброго времени суток. В одном из моих проектов, мне потребовалось ограничить доступ к проекту по IP адресам. Да, можно не заморачиваться с Laravel и закрыть доступ из .htaccess. Что такое .htaccess вы можете прочитать в статье «Что такое .htaccess?», а как ограничить доступ к сайту я описывал в статье «Трюки .htaccess для WordPress». Но нужно было сделать, чтобы клиенту было легко добавлять разрешенные ip-адреса.
И так, приступим …
Создадим middleware:
php artisan make:middleware IPAccess
Разрешенные ip адреса будем хранить в конфигурационном файле ip.php, который будет расположен в директории config.
<?php return [ '127.0.0.1', ];
Адреса храним в конфигурационном файле для упрощения. В самом проекте, адреса хранятся в базе данных и управляются через админпанель.
Теперь давайте опишем наш middleware:
<?php namespace App\Http\Middleware; use Closure; class IPAccess { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if(!in_array($request->ip(), config('ip'))){ abort(403, 'Access denided.'); } return $next($request); } }
Осталось только зарегистрировать наш middleware и применить для всех роутов. Для этого в файл app/Http/Kernel.php добавим в массив $middleware элемент:
\App\Http\Middleware\IPAccess::class,
Все. Теперь проверяем.
Теперь в конфигурационный файл ip.php добавим ip адрес нашей машины (в моем случае это 192.168.10.1)
<?php return [ '127.0.0.1', '192.168.10.1', ];
Проверяем.
Как мы видим все работает.
Заключение.
Мы с вами создали middleware, который проверяет доступ к ресурсу по ip адресу. Список разрешенных ip адресов мы вынесли в конфигурационный файл ip.php. И затем зарегистрировали наш посредник в Kernel.php таким образом, чтобы он применялся ко всем роутам.
Спасибо. Очень полезный функционал