Laravel 10 入門トップページ


目次

  1. 全体の概要
  2. Laravel によるユーザ認証
    1. 概要
    2. プロジェクトの作成と初期設定
    3. メールの設定
    4. Laravel Breeze のインストール
    5. ユーザ登録機能の動作確認
    6. シーダによるテストユーザの登録
    7. テーブルにログイン ID の属性を追加
    8. ユーザ登録機能の修正
    9. ログイン ID でログインするように変更
    10. メールアドレスの検証
    11. シーダの修正
    12. 検証メールの有効期限と再送信
    13. セッション継続時間の確認と変更
    14. メールアドレスの変更
    15. パスワードの変更
    16. アカウントの削除
  3. ユーザ認証を備えたコメント掲示板の開発
  4. マルチ認証の実現

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

Laravel によるユーザ認証

シーダの修正

前のページで新たに登録したユーザはメール検証を経てログインできるようになりました.今後の動作検証のため,シーダで登録するユーザはログイン検証済みの状態で登録するように修正します.

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;

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'
        ]);
    }
}

シードのファイルを修正したので,データベースをリセットしてデータを投入し直します.

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 .... 6ms 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 .................... 10ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ..... 5ms DONE
  2019_08_19_000000_create_failed_jobs_table ............... 8ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ... 13ms DONE
  2023_11_03_101930_add_login_id_to_users_table ........... 14ms DONE


   INFO  Seeding database.

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

vagrant@ubuntu2204 laravelAuth $

念の為,SQLite で確認します.レコードに検証日時の値がセットされたのでこれらのユーザは検証済みと判断されてログインができるようになるはずです.

sqlite> select * from users; ⏎
id|name|email|email_verified_at|password|remember_token|created_at|updated_at|login_id|student_id
1|A. Sample|a@sample.com|2023-11-03 00:05:00|$2y$12$XyGhWfVFN8AdNoO6rFmK/OE5KkCb9s0ucQANTmcvxpIddFwO55SeO||2023-11-03 00:01:01|2023-11-03 00:01:01|user_a|6300997
2|B. Sample|b@sample.com|2023-11-03 00:06:00|$2y$12$BfPbLhODcbV.uxv0KS.LVukcbAiyjG9AuDZVfGiBsO7jyIwqwJq5W||2023-11-03 00:02:01|2023-11-03 00:02:01|user_b|6300998
3|C. Sample|c@sample.com|2023-11-03 00:07:00|$2y$12$QiZttfIa1UAy2rw2ThQsyOOS41AF5CRyq3qzeSPM.9TFe.dSFm7D6||2023-11-03 00:03:01|2023-11-03 00:03:01|user_c|6300999
sqlite>

先ほどログインできなかった user_a でログインを試みます.

laravel10-2023-auth-26.png

ログインできるようになりました.

laravel10-2023-auth-27.png

もう一度ユーザ登録,メールの検証を実行しました.

laravel10-2023-auth-29.png

メールを検証します.

laravel10-2023-auth-30.png

ログインできました.

laravel10-2023-auth-31.png

この作業の前後でデータベースの中身を確認すると次のようになりました.ユーザ登録によって,(2) のとおり,新たなユーザが登録されましたが,email_verified_at は NULL(空値)になっています.また,登録日時 created_at と更新日時 updated_at に同じ値が格納されています.メールの検証によって,(3) のとおり,検証日時がセットされ,更新日時にも同じ値がセットされていることにも注意してください.さらに,登録日時とメールの受信日時を比較すると,メールの受信に3秒程度かかっていることも分かります.

sqlite> select * from users; ⏎ # (1) ユーザ登録前 
id|name|email|email_verified_at|password|remember_token|created_at|updated_at|login_id|student_id
1|A. Sample|a@sample.com|2023-11-03 00:05:00|$2y$12$OiVVmpq8T7hwrUEMe3e9ceTgsTqh3826bhO32fdGotuXXCStlhXXy||2023-11-03 00:01:01|2023-11-03 00:01:01|user_a|6300997
2|B. Sample|b@sample.com|2023-11-03 00:06:00|$2y$12$8zROs3H3.KSrGxC4v1KM.ufZLfTTfPUvDcjXAXwN6ciyxyhX/h2tW||2023-11-03 00:02:01|2023-11-03 00:02:01|user_b|6300998
3|C. Sample|c@sample.com|2023-11-03 00:07:00|$2y$12$Bfi9Lvz38BBKax0Zj0WcjeTylRhvoOsNGrntZtEDjjKDSG/1Ia7/S||2023-11-03 00:03:01|2023-11-03 00:03:01|user_c|6300999
sqlite> select * from users; ⏎ # (2) ユーザ登録後
id|name|email|email_verified_at|password|remember_token|created_at|updated_at|login_id|student_id
1|A. Sample|a@sample.com|2023-11-03 00:05:00|$2y$12$OiVVmpq8T7hwrUEMe3e9ceTgsTqh3826bhO32fdGotuXXCStlhXXy||2023-11-03 00:01:01|2023-11-03 00:01:01|user_a|6300997
2|B. Sample|b@sample.com|2023-11-03 00:06:00|$2y$12$8zROs3H3.KSrGxC4v1KM.ufZLfTTfPUvDcjXAXwN6ciyxyhX/h2tW||2023-11-03 00:02:01|2023-11-03 00:02:01|user_b|6300998
3|C. Sample|c@sample.com|2023-11-03 00:07:00|$2y$12$Bfi9Lvz38BBKax0Zj0WcjeTylRhvoOsNGrntZtEDjjKDSG/1Ia7/S||2023-11-03 00:03:01|2023-11-03 00:03:01|user_c|6300999
4|Koichiro Rinsaka|xxxxxxx@xx.xxxxxxxxxx.ac.jp||$2y$12$rwPZCAHWHxm2k6w52TcMBO45DLzL4oAEXHhLACq2jWn393haRzviG||2023-11-03 18:29:57|2023-11-03 18:29:57|rinsaka|6398901
sqlite> select * from users; ⏎ # (3) メール検証後
id|name|email|email_verified_at|password|remember_token|created_at|updated_at|login_id|student_id
1|A. Sample|a@sample.com|2023-11-03 00:05:00|$2y$12$OiVVmpq8T7hwrUEMe3e9ceTgsTqh3826bhO32fdGotuXXCStlhXXy||2023-11-03 00:01:01|2023-11-03 00:01:01|user_a|6300997
2|B. Sample|b@sample.com|2023-11-03 00:06:00|$2y$12$8zROs3H3.KSrGxC4v1KM.ufZLfTTfPUvDcjXAXwN6ciyxyhX/h2tW||2023-11-03 00:02:01|2023-11-03 00:02:01|user_b|6300998
3|C. Sample|c@sample.com|2023-11-03 00:07:00|$2y$12$Bfi9Lvz38BBKax0Zj0WcjeTylRhvoOsNGrntZtEDjjKDSG/1Ia7/S||2023-11-03 00:03:01|2023-11-03 00:03:01|user_c|6300999
4|Koichiro Rinsaka|xxxxxxx@xx.xxxxxxxxxx.ac.jp|2023-11-03 18:32:03|$2y$12$rwPZCAHWHxm2k6w52TcMBO45DLzL4oAEXHhLACq2jWn393haRzviG||2023-11-03 18:29:57|2023-11-03 18:32:03|rinsaka|6398901
sqlite>

メールの検証ができるようになりました.それでも送信したメールのリンクについて有効期限はどうなっているのでしょうか?有効期限が切れたら再送信可能でしょうか?次のページではこれらについて確認します.

目次に戻る