0Pricing
PHP Academy · レッスン

ミドルウェアでルートを保護する

authとguestミドルウェアを使ってルートを保護し、ユーザーをリダイレクトします

「ミドルウェアでルートを保護する」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

ミドルウェアとは

ミドルウェアは、HTTPリクエストがコントローラーに到達する前または後に実行されるコードです。認証、ロギング、CORS、レート制限などに使用します。

組み込みの認証ミドルウェア

authミドルウェアは、未認証のユーザーをログインページにリダイレクトします(APIリクエストの場合は401を返します)。

<?php
Route::get("/dashboard", [DashboardController::class, "index"])
    ->middleware("auth");

グループへのミドルウェアの適用

ルートのグループ全体を一度に保護できます。

<?php
Route::middleware(["auth", "verified"])->group(function () {
    Route::get("/dashboard", [DashboardController::class, "index"]);
    Route::get("/profile",   [ProfileController::class, "show"]);
});

guestミドルウェア

guestミドルウェアは、認証済みユーザーをログインページや登録ページからリダイレクトします。

<?php
Route::middleware("guest")->group(function () {
    Route::get("/login",    [LoginController::class, "create"]);
    Route::get("/register", [RegisterController::class, "create"]);
});

カスタムミドルウェアの作成

Artisanで生成し、handle()メソッドを実装します。

$ php artisan make:middleware EnsureSubscribed

カスタムミドルウェアのロジック

処理を続行するには次のリクエストを返し、中断するにはレスポンスを返します。

<?php
public function handle(Request $request, Closure $next): Response
{
    if (!$request->user()?->isSubscribed()) {
        return redirect("/subscribe");
    }
    return $next($request);
}

ミドルウェアの登録

app/Http/Kernel.php(Laravel 10)またはbootstrap/app.php(Laravel 11以降)でミドルウェアのエイリアスを登録します。

<?php
// Laravel 11+ bootstrap/app.php:
->withMiddleware(function (Middleware $m) {
    $m->alias(["subscribed" => EnsureSubscribed::class]);
})

ミドルウェアのパラメーター

コロンを使用してミドルウェアにパラメーターを渡します。

<?php
Route::middleware("role:admin")->group(function () {
    // ...
});
// In middleware handle():
public function handle(Request $request, Closure $next, string $role): Response

Afterミドルウェア

$next($request)の後にあるコードは、レスポンスが生成された後に実行されます。ロギングやレスポンスの変更に便利です。

<?php
public function handle(Request $request, Closure $next): Response
{
    $response = $next($request); // controller runs here
    $response->headers->set("X-App", "Laravel");
    return $response;
}

ミドルウェアの優先順位

ミドルウェアが実行される順序は重要です。グローバルミドルウェア(TrimStringsなど)は、ルートミドルウェアより先に実行されます。

Throttleミドルウェア

Laravelには、throttleミドルウェアによるレート制限が組み込まれています。

<?php
Route::middleware("throttle:60,1")->group(function () {
    // 60 requests per 1 minute
});

概要

ミドルウェアはHTTPリクエストをフィルタリングします。ルートを保護するにはauthを適用し、ビジネスルールにはカスタムミドルウェアを作成し、ミドルウェアを共有するにはルートをグループ化します。

クイックチェック

未認証のユーザーに対して、authミドルウェアは何をしますか?

よくある質問

「ミドルウェアでルートを保護する」レッスンは無料ですか?

はい。「ミドルウェアでルートを保護する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「ミドルウェアでルートを保護する」で何を学びますか?

authとguestミドルウェアを使ってルートを保護し、ユーザーをリダイレクトします ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ミドルウェアでルートを保護する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Laravel Breezeによる認証
  2. ミドルウェアでルートを保護する
  3. Gate:シンプルな認可チェック
  4. Policy:モデルベースの認可
← PHP Academyに戻る