認証機能一覧

Laravelでログイン機能を実装する

Laravel5を使用していて、ログイン機能を作成することがあると思います。
Laravel5の標準のログイン機能には、「ログイン」「ユーザ登録」「パスワードリセット」の機能が、標準でついています。

今回の記事では、Laravel5でログイン機能の作成方法を紹介したいと思います。

Laravel5の環境構築については、下記のリンクを参照してください。

LAMP環境やLNMP環境にPHPフレームワーク Laravel5.5・Laravel5.6をインストールする方法について紹介しています。 Laravel5.5・Laravel5.6をインストールする際の参考にしてください。

環境

  • CentOS 7.4
    • PHP 7.2.7
    • MySQL 5.7.22
    • Apache 2.4.6
  • Laravel 5.5/5.6

マイグレーションの実行

Laravel5でログイン機能を作成するためには、.envファイルにデータベースの情報を記載しなければなりません。
データベースを作成後の、.envファイルへの設定方法は、こちらを参照ください。

次にマイグレーションを行います。マイグレーションを行うことによって、認証に必要なテーブルを作成します。
Laravel5のルートディレクトリへ行き、下記のartisanコマンドを打ちます。

# laravelルートディレクトリへ移動
$ cd /pathto_laravel_root/laravel

# artisanコマンドでマイグレーションを実行する
$ php artisan migrate

# 実行結果
[vagrant@localhost laravel]$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

マイグレーションを行ったので、MySQLのテーブルを確認して見ます。

mysql> show tables;
+-------------------+
| Tables_in_laravel |
+-------------------+
| migrations        |
| password_resets   |
| users             |
+-------------------+

「migrations」と「password_resets」と「users」の3つのテーブルが作成されていることが確認できます。
「migrations」はマイグレーションを管理するテーブル、「password_resets」は、パスワードリセットを管理するテーブル、「users」はユーザー情報を管理するテーブルです。

それぞれのテーブルの定義は、下記の様になっています。

mysql> desc migrations;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| migration | varchar(255)     | NO   |     | NULL    |                |
| batch     | int(11)          | NO   |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc password_resets;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| email      | varchar(255) | NO   | MUL | NULL    |       |
| token      | varchar(255) | NO   |     | NULL    |       |
| created_at | timestamp    | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> desc users;
+----------------+------------------+------+-----+---------+----------------+
| Field          | Type             | Null | Key | Default | Extra          |
+----------------+------------------+------+-----+---------+----------------+
| id             | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name           | varchar(255)     | NO   |     | NULL    |                |
| email          | varchar(255)     | NO   | UNI | NULL    |                |
| password       | varchar(255)     | NO   |     | NULL    |                |
| remember_token | varchar(100)     | YES  |     | NULL    |                |
| created_at     | timestamp        | YES  |     | NULL    |                |
| updated_at     | timestamp        | YES  |     | NULL    |                |
+----------------+------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

認証機能を作成する

Laravel5では、認証機能をコマンド一つで作成することが出来ます。
認証に必要となるルートの定義やビュー・コントローラなどをすべてをコマンド一つで簡単に用意することが出来ます。

# laravelルートディレクトリへ移動
$ cd /pathto_laravel_root/laravel

# artisanコマンドで認証に必要となるルート定義とビューを生成する
$ php artisan make:auth

# 実行結果
[vagrant@localhost laravel]$ php artisan make:auth
Authentication scaffolding generated successfully.

コマンドで作成したファイルは下記の様になります

routes/web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

//ここから下が追加
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
コントローラ

コントローラは、/pathto_laravel_root/app/Http/Controllersに下記の様にファイルが作成されます。

[vagrant@localhost Controllers]$ tree
.
├── Auth
│   ├── ForgotPasswordController.php
│   ├── LoginController.php
│   ├── RegisterController.php
│   └── ResetPasswordController.php
├── Controller.php
└── HomeController.php
モデル

モデルは、/pathto_laravel_root/appに「User.php」が下記の様な内容で作成されます。

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

メールの設定

次にメールの設定を行います。パスワードリセットの機能を使用するためには、メールの設定が必要となります。
今回は、PostfixでGmailを使いメールを送信します。
Postfixを使用し、Gmailを送信する方法は、下記の記事を参照して見てください。

CentOS7上のPostfixでGmailを使いメールを送信する方法について紹介しています。

.envファイルを下記の様に編集します。

//ここから下をコメントアウトし、書き換えてしまいます。
//MAIL_DRIVER=smtp
//MAIL_HOST=smtp.mailtrap.io
//MAIL_PORT=2525
//MAIL_USERNAME=null
//MAIL_PASSWORD=null
//MAIL_ENCRYPTION=null

//下記の内容に書き換えてください
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=your_mail_account@gmail.com
MAIL_PASSWORD=xxxxdddddeeeexxx
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=your_mail_account@gmail.com
MAIL_FROM_NAME=your_mail_account@gmail.com

これで、Laravel5の認証が出来上がりました。

・ユーザー登録画面

・ログイン画面

・パスワードリセット画面

・パスワードをリセットした際に送られてくるメール

意外と簡単にLaravel5でログインの機能を作成することが出来ました。
Laravel5で認証の機能を作成しようと考えている方は、参考にしてください。

次回は、この続きとして、マルチログインの機能の作成方法を紹介しています。

Laravel5でマルチ認証(マルチログイン機能)を実装するする方法について紹介しています。Laravel5.5でマルチログインを実装しようとしている人は、参考にしてください。