Laravelでログイン機能付きサイト作成 with XAMPP(2/4) 認証機能の有効化編
目標
Laravel
の認証機能を有効化する
前回の記事
Laravelの基礎学習 with XAMPP
※設定や各アプリの起動などはこの記事に記載したので、不明点などがあったら、この記事を。
認証機能の有効化
Laravelプロジェクトの作成
Laravelインストーラーを利用して、新規Laravelプロジェクトを作成する。
ターミナルを開いて、次のコマンドを実行。
$ laravel new project(プロジェクト名)
インストールが完了したら、内蔵サーバーを起動してちゃんと動くか確認する。
$ php artisan serve
データベースの設定
データベースへ接続
Laravel
が問題なくインストールできていることを確認できたら、XAMPP
を起動し、今回のプロジェクト用データベースを作成。
(プロジェクト名)\.env
を開いて、このプロジェクトをMySQL
と接続するための情報を入力する。
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
は以下のような内容になっている。
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つを削除し、わかりやすいカラム名にする。
具体的には次のようにコードを変更。
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 |
string | |
password | |
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
を編集する。
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/ を開くとLOGIN
とREGISTER(登録画面)
が作成されており、認証機能が有効化されたことが確認できる。
ユーザー登録とログイン
では実際に、認証機能を使ってみる。
右上に作成されたREGISTER
をクリックし、登録画面を開く。
そして、登録したいユーザー情報を各項目に入力する。
入力が完了すると、ホーム画面に遷移する。
phpMyAdmin
を開いて、今回作成したユーザーデータを確認してみると、パスワードが管理者にもわからないよう暗号化されていることがわかる。
これで認証機能を有効化できたことが確認できた。
認証項目の追加
有効化自体は終わったが、論理削除がされているかどうかなどEメールやパスワード以外の項目で認証の確認をしたいこともある。
そのような場合は、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) ユーザー情報変更機能編
参考資料
Author And Source
この問題について(Laravelでログイン機能付きサイト作成 with XAMPP(2/4) 認証機能の有効化編), 我々は、より多くの情報をここで見つけました https://qiita.com/kaitaku/items/13db4b60b7a4db6050af著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .