はじめに
ミドルウェアはリクエストとレスポンスの処理の間に独自のロジックを挿入することができる便利な機能です
今回はアクセス制限を具体例として基礎知識や活用方法を記事にしていきたいと思います
ミドルウェアとは
ミドルウェアは、HTTPリクエストからコントローラまでの間に処理を加えることです(例:アクセスする際に権限のないユーザーはアクセスできないようにする)
一般的なミドルウェアの用途には、認証(先述の例)、ログの書き込み、CORS(Cross-Origin Resource Sharing)の設定などがあります
Laravelでのミドルウェアの作成方法
Laravelでは、以下のコマンドを使用して新しいミドルウェアを作成できます
php artisan make:middleware {作成するミドルウェアの名前}
今回は下記のように作成します
php artisan make:middleware CheckAge
このコマンドにより作成されたファイルを編集して、アクセス制限のロジックを追加します
年齢制限チェックミドルウェアの作成
上記のコマンドを実行すると下記のような内容の、app/Http/Middleware/CheckAge.php
というファイルが追加されます
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
return $next($request);
}
}
ここに特定の年齢以上のユーザーのみアクセスを許可するミドルウェアの例を実装してみます
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}
return $next($request);
}
}
ミドルウェアの登録と使用方法
作成したミドルウェアをアプリケーションに登録するには、app/Http/Kernel.php
ファイルを編集します
このファイルには、グローバルミドルウェア、グループミドルウェア、ルートミドルウェアがあります
グローバルミドルウェアへの登録
グローバルミドルウェアは、すべてのHTTPリクエストに対して適用されるミドルウェアです
protected $middleware = [
// 他のミドルウェア
// 他のミドルウェア
// 他のミドルウェア
\App\Http\Middleware\CheckAge::class,
];
グループミドルウェアへの登録
特定のルートグループにのみ適用したい場合は$middlewareGroups
配列に登録します
protected $middlewareGroups = [
'web' => [
// 他のミドルウェア
// 他のミドルウェア
// 他のミドルウェア
\App\Http\Middleware\CheckAge::class,
],
];
ルートミドルウェアへの登録
特定のルートやコントローラに適用する場合は、$routeMiddleware
配列エイリアスを登録します
protected $routeMiddleware = [
'check_age' => \App\Http\Middleware\CheckAge::class,
];
ルートミドルウェアに関しては、登録後にルートファイル(routes/web.php
またはapi.php
)でミドルウェアを適用します
Route::get('profile', function () {
// プロフィール表示のロジック
})->middleware('check.age');
上記のいずれかでミドルウェアの登録が完了し、アクセスするユーザーが18歳未満であれば対象のページにアクセスできず、リダイレクト先として指定しているhome画面へリダイレクトされます
その他の具体例
認証ミドルウェア
Laravelには標準で認証ミドルウェアが含まれています
これを使用することで、認証されたユーザーのみがアクセスできるルートを設定できます
Route::get('dashboard', function () {
// ダッシュボード表示のロジック
})->middleware('auth');
ログの書き込みミドルウェア
リクエストごとにログの書き込みを行うミドルウェアも作成できます
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Log;
class LogRequest
{
public function handle(Request $request, Closure $next)
{
Log::info('Request Logged: ', ['request' => $request->all()]);
return $next($request);
}
}
まとめ
Laravelのミドルウェアを使用することで、アプリケーションのリクエストとレスポンスの処理の間に独自のロジックを挿入し、アクセス制限や認証回り等を効率的に管理することができます
ぜひご自身のLaravelプロジェクトに適用してみてください!特に認証回りは楽になる印象です
積極的に使っていきましょう~!
参考リンク