Laravelでログイン機能付きサイト作成 with XAMPP(2/4) 認証機能の有効化編


目標

Laravelの認証機能を有効化する

前回の記事

Laravelの基礎学習 with XAMPP
※設定や各アプリの起動などはこの記事に記載したので、不明点などがあったら、この記事を。

認証機能の有効化

Laravelプロジェクトの作成

Laravelインストーラーを利用して、新規Laravelプロジェクトを作成する。
ターミナルを開いて、次のコマンドを実行。

$ laravel new project(プロジェクト名)

インストールが完了したら、内蔵サーバーを起動してちゃんと動くか確認する。

$ php artisan serve

データベースの設定

データベースへ接続

Laravelが問題なくインストールできていることを確認できたら、XAMPPを起動し、今回のプロジェクト用データベースを作成。
(プロジェクト名)\.envを開いて、このプロジェクトをMySQLと接続するための情報を入力する。

(プロジェクト名).env
DB_CONNECTION=mysql
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

マイグレーション(テーブル作成)

今回はLaravelの機能であるマイグレーションを利用して、テーブルとそのカラムを作成する。
既存の(プロジェクト名)\database\migratios\2014_10_12_000000_create_users_table.phpを利用してマイグレーションを行う。
変更前の(プロジェクト名)\database\migratios\2014_10_12_000000_create_users_table.phpは以下のような内容になっている。

(プロジェクト名)\database\migratios\2014_10_12_000000_create_users_table.php
public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

前回の記事で触れられなかった3つのコードについて解説する。

  • **$table->string('email')->unique();**は同じテーブル内で同じデータの値が格納されないための設定。マイグレーションで設定するだけでなく、バリデーションにもunique:(テーブル名)を作成する必要があることに忘れないように。
  • **$table->timestamp('email_verified_at')->nullable();**は登録時にそのメールアドレスに確認用のメールが送信されることを定義している。
  • **$table->rememberToken();**はログイン画面において『ユーザーIDを記録する』といった機能を有効にする際に利用されるカラム。

今回はローカル環境における作業のため、3つのうち上の2つを削除し、わかりやすいカラム名にする。
具体的には次のようにコードを変更。

(プロジェクト名)\database\migratios\2014_10_12_000000_create_users_table.php
public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->text('comment')->default('こんにちは!!');
            $table->timestamps();
            $table->boolean('delete_flag')->default(false);
        });
    }

以上の内容で作成されるusersテーブルのカラムの設定は次の内容。

カラム名 設定
id AUTO_INCREMENTS
name string
email string
password email
remenber_token string
comment text
create_at timestamp
update_at timsestamp
delete_flag boolean

ターミナルを開いて、次のコマンドでマイグレーションを実行し、usersテーブルを作成する。

$ php artisan migrate

マイグレーションが終了したら、phpMyAdminからusersテーブルを確認し、作成したかったカラムと設定になっているかを確かめる。

Laravelにはシーディングというテーブルにデータを挿入する機能があるが、認証機能経由で登録しないとログインできないため、今回は使用しない。

バリデーション

マイグレーションの際に設定したバリデーションを有効化するには、(プロジェクト名)\app\Http\Controllers\AuthにあるRegisterController.phpを編集する。

(プロジェクト名)\app\Http\Controllers\Auth\RegisterController.php
 protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255', 'unique:users'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

マイグレーションでuniqueを設定したら、このファイルにも**unique:(テーブル名)**で設定する必要があることを忘れないように。

認証機能

認証機能の有効化

Laravel公式ドキュメントを読むと、認証機能有効化に関する記述があるので、それに従っていく。

まずはターミナルで次のコマンドを実行して、認証機能有効化に必要なコードやファイルをインストールする。

$ composer require laravel/ui
$ php artisan ui vue --auth
$ npm install
$ npm run dev

上のコマンドの処理が完了し、サーバーを起動して、 http://127.0.0.1:8000/ を開くとLOGINREGISTER(登録画面)が作成されており、認証機能が有効化されたことが確認できる。

ユーザー登録とログイン

では実際に、認証機能を使ってみる。
右上に作成されたREGISTERをクリックし、登録画面を開く。
そして、登録したいユーザー情報を各項目に入力する。

入力が完了すると、ホーム画面に遷移する。

phpMyAdminを開いて、今回作成したユーザーデータを確認してみると、パスワードが管理者にもわからないよう暗号化されていることがわかる。

これで認証機能を有効化できたことが確認できた。

認証項目の追加

有効化自体は終わったが、論理削除がされているかどうかなどEメールやパスワード以外の項目で認証の確認をしたいこともある。
そのような場合は、app\Http\Auth\LoginContoller.phpに以下の内容を追記する。

app\Http\Auth\LoginContoller.php
use Illuminate\Http\Request;

protected function credentials(Request $request)
{
    $temporary = $request->only($this->username(), 'password');
    $temporary['delete_flag'] = 0;

    return $temporary;
}

**$temporary['delete_flag'] = 0;**で論理削除されているかどうかを確かめている。

次回の記事

今回はLaravelのプロジェクトで、認証機能の有効化を果たした。
次回の記事では今回のプロジェクトにユーザー情報を変更できるページを作成していく。
Laravelでログイン機能付きサイト作成 with XAMPP(3/4) ユーザー情報変更機能編

参考資料