書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

Laravel11でのミドルウェアの新規登録方法:CSRF除外なども解説

Laravelバージョンアップ・ニュース

Laravel11では、これまでとミドルウェアの登録方法が色々と変わっています。

Laravel10までは app/Http/Kernel.phpにミドルウェアを登録していましたが、Laravel11では、bootstrap/app.phpにミドルウェアを登録します。

本記事では、Laravel11でのミドルウェアの登録方法を分かりやすく説明しますね。

Laravel10からの違いで悩んだら、ご覧ください。

Laravel11でのミドルウェアの登録方法

たとえば、adminユーザーのみが見れるページを作るとします。

ミドルウェアはこれまでどおり、下記コマンドで作成可能です。コマンド実行後、app/Http/Middlewareの中にミドルウェアファイルができます。

今回はAdminCheckMiddlewareを作りますが、ミドルウェアの名前はお好みで変えてください。

php artisan make:middleware AdminCheckMiddleware

あらかじめ、usersテーブルに “role”カラムを作成しておき、カラムに”admin”と入っていたら、admin(管理者)ユーザーということにします。コード例は次のとおりです。

【AdminCheckMiddlewareコード例】

class AdminCheckMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        // ログインユーザーのロールがadminなら次に進める
        if (Auth::user()->role == 'admin') {
            return $next($request);
        }    

        // 権限がない場合は403エラーを返す
        abort(403, 'Unauthorized access.');
    }
}

作成したミドルウェアを登録します。bootstrap/app.phpファイルに次のようにいれます。

【bootstrap/app.php】

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    // 作成したミドルウェアを登録
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin.check' => AdminCheckMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

AdminCheckMiddlewareを使用する際に、admin.checkというエイリアスを使います。エイリアスとは、本来の名前やクラス名の代わりに、より短く簡単な名前を付ける仕組みです。

エイリアスは「あだ名」と考えてしまうと分かりやすいですよ。

これでミドルウェアができました。実際に、管理者しか見れないページにミドルウェアを設定するには、次のようにルート設定を記述します。

【web.php】

// 管理者しか見れないページ
Route::get('/admin', function () {
    return view('admin');
})->middleware(['auth', 'admin.check'])->name('admin');

おまけ:ミドルウェアの実行順序

なお、Webアプリ全体に適用されるグローバルミドルウェアというものがありますが、このグローバルミドルウェアよりも先、または後にミドルウェアを実行したい場合は、appendやprependを使用します。

公式マニュアルには次のように書かれています。

appendメソッドは、ミドルウェアをグローバルミドルウェアリストの最後に追加します。ミドルウェアをリストの先頭に追加したい場合は、prependメソッドを使うべきです。

11.x ミドルウェア Laravel

appendを使用すると、指定したミドルウェアはグローバルミドルウェアよりも後に実行されます。prependを使用すると、指定したミドルウェアはグローバルミドルウェアよりも先に実行されます。

【append利用例】

    // 作成したミドルウェアを登録
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin.check' => AdminCheckMiddleware::class,
        ]);
        $middleware->append(AdminCheckMiddleware::class);
    })

CSRF除外設定

なおCSRF保護から除外したいパスは、これまではMiddleware/VerifyCsrfTokenにいれていました。Laravel11では、これもbootstrap/app.phpに記述します。たとえば/stripeというパスをCSRF除外にするには、次のように書きます。

【bootstrap/app.php】

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        // api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        // channels: __DIR__.'/../routes/channels.php',
        health: '/up',
    )
    // CSRF除外
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->validateCsrfTokens(except: [
            '/stripe',
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

TrimStrings除外設定

TrimStringsから除外するパスも同じような形で、bootstrap/app.phpに記述します。たとえば/passwordというパスをTrimStrings除外にするには、次のように書きます。

*TrimStrnigsは、HTTPリクエストで送信されたデータの文字列値から、先頭と末尾の空白を自動的に削除(トリム)するミドルウェアです。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        // api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        // channels: __DIR__.'/../routes/channels.php',
        health: '/up',
    )
    // TrimStrings除外
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->trimStrings(except: [
            '/password',
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

さいごに

以上、Laravel11からのmiddlewareについてでした。下記公式マニュアルも参考にしてください。

Laravel11になってから変わった他の部分については、下記記事にまとめています。

Laravelバージョンアップ・ニュース

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

タイトルとURLをコピーしました