ミドルウェア
はじめに
ミドルウェアは、アプリケーションに入力されるHTTPリクエストを検査およびフィルタリングする便利なメカニズムを提供します。たとえば、Laravelには、アプリケーションのユーザーが認証されているかどうかを検証するミドルウェアが含まれています。ユーザーが認証されていない場合、ミドルウェアはユーザーをアプリケーションのログイン画面にリダイレクトします。ただし、ユーザーが認証されている場合、ミドルウェアはリクエストをアプリケーション内でさらに進めることを許可します 。
認証以外のさまざまなタスクを実行するために、追加のミドルウェアを作成することができます。たとえば、ログ記録ミドルウェアは、アプリケーションに入力されるすべてのリクエストをログに記録するかもしれません。Laravelには、認証やCSRF保護のためのミドルウェアが含まれていますが、すべてのユーザー定義のミドルウェアは通常、アプリケーションの app/Http/Middleware
ディレクトリに配置されています。
ミドルウェアの定義
新しいミドルウェアを作成するには、make:middleware
Artisanコマンドを使用します:
php artisan make:middleware EnsureTokenIsValid
このコマンドは、app/Http/Middleware
ディレクトリに新しい EnsureTokenIsValid
クラスを配置します。このミドルウェアでは、指定された値に一致する token
入力が提供された場合にのみ、ルートへのアクセスを許可します。それ以外の場合は、ユーザーを home
URI にリダイレクトします:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}
return $next($request);
}
}
ご覧の通り、指定された token
が秘密のトークンと一致しない場合、ミドルウェアはクライアントにHTTPリダイレクトを返します。それ以外の場合は、リクエストはアプリケーション内でさらに進められます。リクエストをアプリケーション内でさらに進めるために(ミドルウェアを「通過」させるために)、$request
を使用して $next
コールバックを呼び出す必要があります。
ミドルウェアは、アプリケーションに到達する前に HTTP リクエストが通過する必要がある「レイヤー」のシリーズとして考えるのが最適です。各レイヤーはリクエストを検査し、それを完全に拒否することさえできます。
すべてのミドルウェアは サービスコンテナ を介して解決されるため、ミドルウェアのコンストラクタ内で必要な依存関係を型ヒントできます。