Laravelのミドルウェアでリクエスト情報をチェックする方法を徹底解説!初心者でもわかる実践ガイド
生徒
「Laravelで送られてくるリクエスト情報って、どうやってチェックできるんですか?」
先生
「Laravelにはミドルウェアという仕組みがあって、その中でリクエスト内容を確認したり加工したりできますよ。」
生徒
「ミドルウェアって名前は聞いたことがありますが、何をするものなのかはよくわかりません…」
先生
「ミドルウェアはページに入る前に通る“関所”のようなもので、そこでリクエスト情報をチェックできます。例えばIPアドレスを調べたり、特定の値があるか判定したりできます。」
生徒
「なるほど!実際にどうやって作るのか知りたいです!」
先生
「それではLaravelのミドルウェアでリクエストを検査する方法を丁寧に見ていきましょう。」
1. ミドルウェアとは?
Laravelのミドルウェアは、ページを表示する前に必ず通るチェックポイントのような仕組みです。例えば、送られてきたリクエストに含まれる情報を調べたり、特定の条件が整っていない場合に別のページへ移動させる処理を行ったりできます。
プログラミングが初めての人は、ミドルウェアを「入り口に立っている門番」とイメージすると理解しやすくなります。この門番は「この人の情報は正しいか?」「許可されたIPアドレスからのアクセスか?」などを確認してからページへ進ませます。
2. ミドルウェアでリクエストをチェックする基本の流れ
ミドルウェアでリクエスト情報をチェックする流れはとてもシンプルです。
まずミドルウェアを作成し、その中でリクエスト内容を取得して判定します。例えば「特定のヘッダーがついているか」「IPアドレスが許可されたものか」などを調べられます。
リクエストはLaravelのアプリケーションに入る時点で$requestという形で渡されるため、ミドルウェアの中でそのまま扱えます。
public function handle($request, Closure $next)
{
// ここでリクエスト情報をチェック
return $next($request);
}
3. ミドルウェアを作成する手順
ミドルウェアはartisanコマンドを使って簡単に作成できます。
php artisan make:middleware CheckUserAgent
このコマンドでapp/Http/Middleware内にファイルが生成されます。その中でリクエスト情報を自由にチェックできます。
4. リクエストヘッダーをチェックする例
リクエストヘッダーとは、ブラウザやアプリがサーバーに送る追加情報のことです。例えばスマホから来たのかPCから来たのかを判別する手がかりにもなります。
次の例では、User-Agentというヘッダーに特定の文字が含まれているかチェックしています。
public function handle($request, Closure $next)
{
$ua = $request->header('User-Agent');
if (strpos($ua, 'iPhone') === false) {
return response('iPhone以外からはアクセスできません', 403);
}
return $next($request);
}
このように、Laravelではヘッダー情報を簡単に取得して条件分岐することができます。
5. リクエストパラメータをチェックする例
URLに含まれる情報やフォームの送信内容をチェックすることもできます。例えば、特定のキーが必ず存在するかどうかを確認したい場合です。
public function handle($request, Closure $next)
{
if (!$request->has('token')) {
return response('必要なパラメータがありません', 400);
}
return $next($request);
}
has()はパラメータがあるかどうかを確認する関数で、簡単にチェックできます。
6. IPアドレスをチェックする例
例えば管理画面を特定のネットワークからしか使わせたくない場合など、IPアドレスチェックが役立ちます。
public function handle($request, Closure $next)
{
$ip = $request->ip();
if ($ip !== '123.123.123.123') {
return response('このIPアドレスからはアクセスできません', 403);
}
return $next($request);
}
リクエストのip()メソッドを使えば、アクセス元のアドレスを簡単に取得できます。
7. ミドルウェアをルートに適用する方法
作成したミドルウェアはルートに紐づけて使用します。
Route::get('/sample', function () {
return 'チェック完了';
})->middleware('check.user.agent');
設定しておくと、ルートにアクセスしたとき必ず先にミドルウェアが実行されます。