laravel5.5で、IP制限をmiddlewareで実装してみた。
管理者画面にアクセスできるのは、本社IPだけにしたい!みたいな時に便利。
1, laravelで制限&認証と言えば、middlewareを使うのが一般的。
1 |
php artisan make:middleware IPAuthMiddleware |
2, 次にlaravelに登録(app/Http/Kernel.php)します。
通常のユーザ認証と同じように、指定したルーティングに対してだけIP制限を行う
protected $middleware = [];の方に登録すると、全てのルーティングに対して行う
1 2 3 |
protected $routeMiddleware = [ 'ip.auth' => 'App\Http\Middleware\IPAuthMiddleware', ]; |
3, IPAuthMiddlewareの実装(IP制限)を書く
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php namespace App\Http\Middleware; use Closure; class IPAuthMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 管理画面にアクセスできるIP $admin_ip_address = "123.123.123.123"; // 本番稼働中(.envの値を読み込む。変化しない時はキャッシュクリアする) if( config('app.debug') === false){ if($admin_ip_address !== \Request::ip()){ die('このページは見れません'); } } return $next($request); } } |
4, web.phpにIP制限のかけたいURLを指定する
1 2 3 4 5 6 7 8 9 |
// システム管理者向け画面(本社のみアクセス可能なIP制限)////////////////////////////////////////// Route::group(['prefix' => 'admin', 'middleware' => 'ip.auth'], function() { Route::get('/', function () { return redirect('/admin/home'); }); Route::get('login', 'Admin\LoginController@showLoginForm')->name('admin.login'); Route::post('login', 'Admin\LoginController@login')->name('admin.login'); }); // フォーム認証後の方にも忘れずに! Route::group(['prefix' => 'admin', 'middleware' => ['auth:admin', 'ip.auth']], function() { |
これで完成!