Laravel 10 入門トップページ


目次

  1. 全体の概要
  2. Laravel によるユーザ認証
  3. ユーザ認証を備えたコメント掲示板の開発
    1. 概要
    2. データベースのマイグレーション
    3. シーダによるコメントデータの登録
    4. モデルとコントローラの生成
    5. ルートの定義と確認
    6. 未検証ユーザの動作検証
    7. コメントの一覧表示
    8. ナビゲーションメニューの追加
    9. コメント一覧の Tailwind CSS によるスタイリング
    10. コメントの詳細ページ
    11. リレーションシップの設定と投稿者名の表示
    12. ページネーションの作成
    13. コメントの投稿
    14. コメントの編集
    15. コメントの削除
    16. ナビゲーションのハイライトを調整
  4. マルチ認証の実現

Laravel でユーザ認証とマルチ認証を実現する

ユーザ認証を備えたコメント掲示板の開発

未検証ユーザの動作検証

シーダを使って3名のテストユーザを登録しましたが,いずれもメールでの検証が完了しており,コメントも投稿済みの状態になっています.動作確認のためにもメールの検証が完了していないユーザ (user_d) をここで作成して,どのような動作になるかを検証します.

このために,シーダを次のとおり修正して,email_verified_at が設定されていないユーザ情報を作成します.

database/seeders/UsersTableSeeder.php<?php

namespace Database\Seeders;

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

use App\Models\User;
use Carbon\Carbon;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
        DB::table('users')->delete();

        User::create([
            'name' => 'A. Sample',
            'email' => 'a@sample.com',
            'login_id' => 'user_a',
            'student_id' => 6300997,
            'password' => bcrypt('abc'),
            'email_verified_at' => '2023-11-03 00:05:00',
            'created_at' => '2023-11-03 00:01:01',
            'updated_at' => '2023-11-03 00:01:01'
        ]);

        User::create([
            'name' => 'B. Sample',
            'email' => 'b@sample.com',
            'login_id' => 'user_b',
            'student_id' => 6300998,
            'password' => bcrypt('abc'),
            'email_verified_at' => '2023-11-03 00:06:00',
            'created_at' => '2023-11-03 00:02:01',
            'updated_at' => '2023-11-03 00:02:01'
        ]);

        User::create([
            'name' => 'C. Sample',
            'email' => 'c@sample.com',
            'login_id' => 'user_c',
            'student_id' => 6300999,
            'password' => bcrypt('abc'),
            'email_verified_at' => '2023-11-03 00:07:00',
            'created_at' => '2023-11-03 00:03:01',
            'updated_at' => '2023-11-03 00:03:01'
        ]);

        User::create([
            'name' => 'D. Sample',
            'email' => 'd@sample.com',
            'login_id' => 'user_d',
            'student_id' => 6300996,
            'password' => bcrypt('abc'),
            // 'email_verified_at' => '',
            'created_at' => '2023-11-04 00:04:01',
            'updated_at' => '2023-11-04 00:04:01'
        ]);
    }
}

シーダを修正したらデータベースをリセットしてデータを登録し直します.

vagrant@ubuntu2204 laravelAuth $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎

   INFO  Rolling back migrations.

  2023_11_03_101930_add_login_id_to_users_table ............ 2ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .... 7ms DONE
  2019_08_19_000000_create_failed_jobs_table ............... 5ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ..... 5ms DONE
  2014_10_12_000000_create_users_table ..................... 6ms DONE


   INFO  Running migrations.

  2014_10_12_000000_create_users_table .................... 11ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ..... 4ms DONE
  2019_08_19_000000_create_failed_jobs_table ............... 8ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ... 12ms DONE
  2023_11_03_101930_add_login_id_to_users_table ........... 14ms DONE


   INFO  Seeding database.

  Database\Seeders\UsersTableSeeder ......................... RUNNING
  Database\Seeders\UsersTableSeeder .................. 640.13 ms DONE

  Database\Seeders\CommentsTableSeeder ...................... RUNNING
  Database\Seeders\CommentsTableSeeder ............... 503.58 ms DONE

vagrant@ubuntu2204 laravelAuth $

メール検証済みのユーザ3名と,未検証ユーザ1名が登録されたはずなので,動作を確認します.

検証済みの user_a でログインすると /dashboard にリダイレクトされ,/profile や /comments にもアクセスできるはずです.

laravel10-2023-auth-50.png

次にログアウトした状態で /comments にアクセスすると,ログインページにリダイレクトされます.そこで user_a でログインすると /comments へリダイレクトされます.(この機能が実は便利で,メールの本文などに必要なページのURLを入れておけば,ログイン完了後にそのページを見せることができます.)

laravel10-2023-auth-52.png

さらに未検証ユーザである user_d で検証します.ログインするとメールの検証を促すページ /email/verify が表示されます.メールの検証を完了しなくても /profile のページは表示されます.しかし,/dashboard や /comments にはアクセスできず,メールの検証を促すページへ /email/verify リダイレクトされます.

laravel10-2023-auth-53.png

いずれにせよ,(1) ユーザが検証済みであること,(2) ユーザがログインしていること,という条件が揃ってはじめて /comments を閲覧できることがわかりました.

目次に戻る