シーダを使って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 にもアクセスできるはずです.
次にログアウトした状態で /comments にアクセスすると,ログインページにリダイレクトされます.そこで user_a でログインすると /comments へリダイレクトされます.(この機能が実は便利で,メールの本文などに必要なページのURLを入れておけば,ログイン完了後にそのページを見せることができます.)
さらに未検証ユーザである user_d で検証します.ログインするとメールの検証を促すページ /email/verify が表示されます.メールの検証を完了しなくても /profile のページは表示されます.しかし,/dashboard や /comments にはアクセスできず,メールの検証を促すページへ /email/verify リダイレクトされます.
いずれにせよ,(1) ユーザが検証済みであること,(2) ユーザがログインしていること,という条件が揃ってはじめて /comments を閲覧できることがわかりました.