Laravelのミドルウェアの作成方法と2つの適用方法【初心者のためのLaravel入門講座】

Laravelセキュリティ

Laravelでは、自分でミドルウェアを設定できます。

ミドルウェアの適用するには、ルート設定に書く方法や、コントローラのコンストラクタに書く方法があります。

それぞれの方法の手順を解説していきます。

Junko
Junko

「ミドルウェアって何?」と思ったら、まずは下記記事をご覧ください。マンガ入りで解説しています。

今回作成するLaravelのミドルウェア

今回は、特定のユーザー以外は入れないページを設定してみます。

次のような設計にします。

  • ユーザーidが1のユーザーのみ、testページにアクセスできるようにする
  • 他のユーザーがtestページにアクセスしようとした場合、もしログインしていなければログインページに、ログイン済みならトップページにリダイレクトする

なお、実行にあたってはLaravelの認証機能が必要になります。

もしまだ認証機能を付けていない場合には、前回の記事を参考にしながらインストールをしておいてくださいね。

10分程度で終わります。

Laravelミドルウェアの作成:ルート設定に書く

それでは、実際にLaravelを操作しながら、ミドルウェアを実装してみましょう。

①新しくミドルウェアを作成する

php artisan コマンドで新しくミドルウェアを作成します。

②Kernel.phpファイルにミドルウェアのパスを入力する

app/Http フォルダの中のKernel.phpファイルに、作成したミドルウェアについて登録しておきます。

入力後のファイルは、次のようになります。

③データベースを準備しておく

まずはユーザー登録画面より、ユーザーを1人登録しておいてください。

ユーザー登録画面は、トップページ右上のRegisterをクリックすると表示されます。

【トップページ】

【ユーザー登録ページ(/register)】

 

データベースのusersテーブルを開きます。登録したユーザーのidが1であることを確認しておきます。

④ユーザーモデルファイルを編集する

app/Modelsフォルダの中のUser.phpを開きます。次のコードを追加します。

コードの意味

  • もしユーザーのidが【1】であれば、trueとします。
  • そうでなければ、falseとします。

⑤ミドルウェアファイルを編集する

先ほど作成したミドルウェアファイルを編集します。

app/Http/Middleware の中のTestMiddleware.phpファイルを開き、一番上に次のコードをいれます。

入力後のファイルは、次のようになります。

次に、下記のコードを追加します。

コードの意味

  • $userは、認証済みユーザー(ログイン済みユーザー)とします。
  • もし$userが(ユーザーモデルに記した)testの条件を満たしていなければ、redirect処理をします。トップページを表示してください。
  • もしtestの条件を満たしていたら、リクエストを実行してください。

⑥ルートファイルを編集する

routesフォルダの中のweb.phpファイルを開きます。

下記のコードを入力します。

コードの意味

  • /test ページにアクセスがあれば、AuthミドルウェアとTestMiddlewareを実施してください。
  • もしミドルウェアを通過したら、「ミドルウェアの実験成功」と返してください。

/testにアクセスしたユーザーは、まずミドルウェアのチェックを受けることになります。

最初にauthミドルウェアのチェックを受けます。これによって、ログインしていなければログイン画面にリダイレクトします。

Junko
Junko

authミドルウェアは、前回記事で解説しています。

ログイン済みだった場合は、TestMiddlewareのチェックを受けます。TestMiddlewareは、idが1番のユーザーしか通さないように設定しています。そのため、idが1以外のユーザーがアクセスすると、トップページにリダイレクトします。

idが1のユーザーがアクセスした場合、「ミドルウェアの実験成功」メッセージが表示されます。

⑦ミドルウェアの実験をしてみる

準備が整ったら、実験をしてみましょう。

idが【1】のユーザーとして、Laravelのトップページからログインしまず。

/test ページを開き、下記のメッセージが表示されていれば成功です!

他の条件でもテストしてみてください。

ログインしていない状態で/testにアクセスした場合は、ログイン画面が表示されます。

idが1でないユーザーとしてログインして、/testにアクセスした場合は、トップページが表示されます。

Laravelミドルウェアの作成:コントローラーのコンストラクタに書く

次にミドルウェアを適用する2つ目の方法を解説します。

上記の【Laravelミドルウェアの作成:ルート設定に書く】と途中まで同じです。

手順⑥から変わってくるので、そこから解説していきますね。

⑥ルートファイルを編集する(コンストラクタ編)

routesフォルダの中のweb.phpファイルを開きます。

下記のコードを入力します。

コードの意味

  • /test ページにアクセスがあれば、Authミドルウェアを実施してから、TestControllerのindexメソッドを実行します。

次にTestControllerのindexメソッドを書いていきます。

⑦ コントローラーファイルを作成する(コンストラクタ編)

次のようにコマンドを入力して、TestControllerを作成します。

⑧コントローラーファイルを編集する(コンストラクタ編)

app/Http/Controllers ファイルから、TestContoller.phpファイルを開きます。

次のように入力します。

コードの意味

◆__constructメソッド(コンストラクタ):初期設定。
このクラスの各メソッドを実行するときは、TestMiddlewareを実行してください。
◆index()メソッドでは、「ミドルウェアの実験成功2」と返してください。

⑨ミドルウェアの実験をしてみる(コンストラクタ編)

準備が整ったら、先ほどと同じように実験してみましょう。

まずidが【1】のユーザーとして、Laravelのトップページからログインしてみます。

/test2 ページを開き、下記のメッセージが表示されていれば成功です!

他の条件でも試してみましょう。

ログインしていない状態で/testにアクセスした場合は、ログイン画面が表示されます。

idが1でないユーザーとしてログインして、/testにアクセスした場合は、トップページが表示されます。

さいごに

今回のまとめ

  • middlewareは【php artisan make:middleware】で作成できる。ファイル作成後、Kernel.phpに作成したmiddlewareを入力しておく
  • 作成にはルート設定に書く方法や、コントローラーに書く方法がある

Larvelはファイル同士の関連性を理解するのが面倒です。

ただ分かってくると、あらかじめ色々準備されていて、非常に効率よく機能を実装できるシステムだということが見えてきます。

「Laravelの使い方を基本から学びたい」と思ったら、学習サイト【Laravelの教科書】をご活用ください。

Laravelの基本を学びながら、フォーラムサイトを作成していきます。

詳しくは、下記の案内ページをご覧ください。

Laravelの教科書について詳しく知る

Junko
Junko

基礎編部分は無料プレゼント中です♪

Laravelセキュリティ Laravel入門講座 Laravel認証機能

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

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

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

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

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

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる


Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
セミナーで、StripeやChatGPT連携、デバックなど実践スキルを分かりやすく学べます。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました