Laravel認証機能のプロジェクトへの追加(2)
手順3:データベースへのテーブルの追加
Laravelではこのように、自動生成された認証機能によって、ほぼコーディングなしでログイン処理やユーザー登録処理を利用できます。ただし、これらの処理では、データベース内のusersテーブルのデータを利用します。そのため、最後の手順としてデータベースにこのusersテーブルを作成しておく必要がありますが、これもほぼ自動でできます。
Laravelには、データベースマイグレーションという機能があります。これは、データベース内のテーブルの生成、削除、初期データの挿入といった、アプリケーションの動作に必要なデータベース環境構築を自動化できる機能です。マイグレーションを利用するためには、マイグレーション用のファイルを用意し、Laravelのコーディングルールに従ってテーブル生成などのPHPコードを記述して、マイグレーション用のコマンドを実行するだけです。
具体的に見ていきましょう。認証機能本体はLaravelによって用意されたものですので、そこで利用されるテーブルのマイグレーションファイルも同様に、あらかじめ用意されています。database/migrationsディレクトリを見てください。中に、
- 2014_10_12_000000_create_users_table.php
- 2014_10_12_100000_create_password_resets_table.php
- 2019_08_19_000000_create_failed_jobs_table.php
の3つのファイルが入っているはずです。マイグレーションファイルは、このように、
ファイルが生成されたタイムスタンプ_create_テーブル名_table.php
のファイル名になっています。このことから、上記3つのファイルは、順にusersテーブル、password_resetsテーブル、failed_jobsテーブル用のマイグレーションファイルであることがわかります。このうち認証機能で利用されるのはusersテーブルと、認証機能中のパスワード再発行で利用されるpassword_resetsテーブルの2つです。ここでは、サンプルとしてusersテーブル用のマイグレーションファイルである2014_10_12_000000_create_users_table.phpを見ておきましょう。中のコードをリスト1に抜粋します。
<?php 〜省略〜 class CreateUsersTable extends Migration { public function up() // (1) { Schema::create('users', function (Blueprint $table) { 〜省略〜 }); } public function down() // (2) { Schema::dropIfExists('users'); } }
本稿は、データベースのマイグレーションを解説するものではありませんので、ここでは簡単に紹介するに留めておきます。マイグレーションファイルには、テーブルを作成するためのup()メソッド(リスト1の(1))と、テーブルを削除するためのdown()メソッド(リスト1の(2))を記述します。up()メソッド内はSchemaクラスのメソッドcreate()を利用してテーブルの作成コードなどを記述します。down()メソッド内は、同じくSchemaクラスのdropIfExists()メソッドを利用してテーブルの削除コードを記述します。これらの詳細な記述方法は公式ドキュメントなどを参照してください。ここでは、リスト1の(1)のcreate()メソッドの第1引数から、usersテーブルが生成されることを確認しておいて、次に進みます。
このようにして用意されたマイグレーションファイルを実行します。ただし、そのためには、あらかじめデータベースへの接続が可能でないとダメです。こちらは、前回のデータベースの接続設定を参考にしてください。今回も、前回同様、fldbデータベースとflusrユーザを利用することにします。その状態で、firstlaravelディレクトリで次のコマンドを実行してください。
php artisan migrate
特にエラー表示などなければ、無事各テーブルが作成されています。 これで、認証機能を利用できる環境が整いました。
ユーザー登録からログイン後の遷移
実際に動作確認を行っていきましょう。まず、ユーザー登録です。図3のユーザー登録画面に適当な情報を入力して[Register]ボタンをクリックしてください。すると、図4の画面に移動します。
これが、新たに追加されたホーム画面です。ここで、左上の[Laravel]リンクをクリックすると、図5のトップ画面が表示されます。
図1と違い、右上のリンクが[HOME]に変化しており、ログイン後であることがわかります。この[HOME]リンクをクリックすると、図4のホーム画面が表示されます。
さらに、ホーム画面から[Logout]リンクをクリックすると、ログアウト処理が行われ、図1と同じトップ画面が表示されます。
今度は、[LOGIN]リンクをクリックし、図2のログイン画面を表示させ、先ほど登録したメールアドレスとパスワードを入力して、ログインを行ってください。再度、図4のホーム画面が表示されます。
このように、Laravelの認証機能のスキャフォールディングを利用することで、コーディングすることなしに、ユーザー登録からログイン、ログアウトなどの機能を実現できます。