Laravel Breezeパッケージを使って認証と認可

認可(Authorization)とは、「あなたはこのアクションを実行する権限がありますか?」という権限確認を行うこと。

例えば「誰でも閲覧できる」「ログイン中のユーザーのみが閲覧できる」「管理者のみがデータを作成できる」など、ルーティングの各ルートにアクセス権限を設定するのが認可です。

  • 認証(Authentication)=「あなたは本当に○○さんですか?」という本人確認を行う
  • 認可(Authorization)=「あなたはこのアクションを実行する権限がありますか?」という権限確認を行う

Laravel Breezeパッケージの追加

プロジェクトディレクトリ上でコマンド

composer require laravel/breeze --dev

Laravel Breezeパッケージのインストール

php artisan breeze:install

コマンドを実行すると3つの質問が続くので、それぞれ以下のように入力してエンターキー

質問 回答
Which Breeze stack would you like to install?(どのBreezeスタックをインストールしますか?) blade
Would you like dark mode support?(ダークモードをサポートしますか?) no
Which testing framework do you prefer?(テスト用のフレームワークはどちらを使いますか?) 0

Laravel Breezeパッケージのインストールによって生成・編集される主なファイル

  • コントローラ
    • app/Http/Controllers/Auth
      • ログイン、会員登録、パスワードリセットなど、認証関連の各種コントローラを配置
    • app/Http/Controllers/ProfileController.php
      • 会員情報の更新・削除に関するコントローラ
  • フォームリクエス
    • app/Http/Requests/Auth/LoginRequest.php
      • ログイン時のバリデーションルールを定義
    • app/Http/Requests/ProfileUpdateRequest.php
      • 会員情報を更新する際のバリデーションルールを定義
  • ビュー
    • resources/views/auth
      • ログイン、会員登録、パスワードリセットなど、認証関連の各種ビューファイルを配置
    • resources/views/dashboard.blade.php
      • ログイン後にリダイレクトされるダッシュボード
    • resources/views/components
      • ボタンやドロップダウンなど、ページの部品を配置
    • resources/views/layouts
      • ナビゲーションメニューなど、複数のページで共有するビューファイルを配置
    • resources/views/profile
      • 会員情報の更新・削除に関するビューファイルを配置
  • ルーティング
    • routes/auth.php
      • 認証関連のルートを定義
    • routes/web.php
      • ダッシュボードや会員情報の更新・削除に関するルートを定義 ※既存のweb.phpファイルが上書きされるため、アプリ開発の途中でインストールする場合は注意が必要
  • テスト(テストについては31章で学習)
    • tests/Feature/ProfileTest.php
      • 認証関連のテストを定義
  • その他
    • tailwind.config.js
      • Tailwind CSSの設定ファイル
    • package.json
      • リストにTailwind CSSやAlpine.jsなどを追記

ルーティング

Laravel Breezeをインストールすると、既存のroutes/web.phpファイルが上書きされる。そのため、Laravel Breezeは新規のLaravelプロジェクトにインストールするのが一般的
開発途中でインストールする場合はルーティングしなおす。

マイグレーションの実行

Laravel Breezeでは、Laravelがデフォルトでマイグレーションファイルを用意しているusersテーブルとassword_reset_tokensテーブルを利用し、認証機能を実装しています。

新規のLaravelプロジェクトの場合はこのタイミングでマイグレーションを実行し、マイグレーションファイルを適用する必要があります。

依存関係のインストールとアセットのビルド

インストール

npm install

ビルド

npm run build

認証の日本語化


resources/views/auth/login.blade.php

<x-guest-layout>
    <!-- Session Status -->
    <x-auth-session-status class="mb-4" :status="session('status')" />

    <form method="POST" action="{{ route('login') }}">
        @csrf

        <!-- Email Address -->
        <div>
            <x-input-label for="email" :value="__('Email')" />
            <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus autocomplete="username" />
            <x-input-error :messages="$errors->get('email')" class="mt-2" />
        </div>

<!--======== 後略 ========-->

__()ヘルパ関数
__()ヘルパーは、config/app.phpファイルの'locale'に設定中の言語ファイルから、指定したキー(上記の場合は'Email')に対応する値を呼び出す。

例えばconfig/app.phpファイルの'locale'に'ja'を指定した場合、resources/langフォルダ内にあるja.jsonというファイルが参照される。

resources/lang/ja.json

{
  "Email": "メールアドレス",
  "Password": "パスワード",
  "Remember me": "ログイン状態を保存する",
  "Log in": "ログイン",
  "Forgot your password?": "パスワードをお忘れですか?",
  "Name": "ユーザー名",
  "Confirm Password": "パスワード(確認用)",
  "Register": "登録",
  "Already registered?": "すでに登録済みですか?"
}

認証機能が追加されている。

ルート/

laravel-breeze-/

Login

laravel-breeze-login

3 認可の実装

Laravelにおいて、特定のルートで認可やその他の前処理を行うには、middleware()メソッドを使います。引数として渡すエイリアス(別名、あだ名)によって、その前処理の内容が決まります。

エイリアス 説明
'auth' ユーザーがログイン済みであることを確認する。未ログインの場合、デフォルトではログインページ(/login)にリダイレクトされる。
'guest' ユーザーがゲスト(未ログイン)であることを確認する。ログイン済みの場合、デフォルトではダッシュボード(/dashboard)にリダイレクトされる(Laravel Breezeを利用している場合)。
'verified' ユーザーがメール認証済みであることを確認する(メール認証機能を有効にしている場合のみ)。メール認証済みでない場合、デフォルトではメール認証を促すページ(/verify-email)にリダイレクトされる(Laravel Breezeを利用している場合)。

認可の例

Route::get('/vendors/create', [VendorController::class, 'create'])->middleware('auth');

vendors/createにGETメソッドでリクエストが来たらミドルウェアに引数authが渡されてるので、上記の通りにログインされていれば表示、ログインされていなければログインページにリダイレクトされる。