1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-08-25

目標

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をクリックし、登録画面を開く。
そして、登録したいユーザー情報を各項目に入力する。

screenshot.jpg

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

screenshot.jpg

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

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

認証項目の追加

有効化自体は終わったが、論理削除がされているかどうかなど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) ユーザー情報変更機能編

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1