Laravel5を使用していて、ログイン機能を作成することがあると思います。
Laravel5の標準のログイン機能には、「ログイン」「ユーザ登録」「パスワードリセット」の機能が、標準でついています。
今回の記事では、Laravel5でログイン機能の作成方法を紹介したいと思います。
Laravel5の環境構築については、下記のリンクを参照してください。
環境
- 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/ # 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を送信する方法は、下記の記事を参照して見てください。
.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で認証の機能を作成しようと考えている方は、参考にしてください。
次回は、この続きとして、マルチログインの機能の作成方法を紹介しています。