前のページで新たに登録したユーザはメール検証を経てログインできるようになりました.今後の動作検証のため,シーダで登録するユーザはログイン検証済みの状態で登録するように修正します.
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 でログインを試みます.
ログインできるようになりました.
もう一度ユーザ登録,メールの検証を実行しました.
メールを検証します.
ログインできました.
この作業の前後でデータベースの中身を確認すると次のようになりました.ユーザ登録によって,(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>
メールの検証ができるようになりました.それでも送信したメールのリンクについて有効期限はどうなっているのでしょうか?有効期限が切れたら再送信可能でしょうか?次のページではこれらについて確認します.