Kyomachi-blog

record of fighting:PHP/Laravel , HTML/CSS , Javascript etc

Laravel 5.7|認証機能でログインとユーザー登録機能を実装する

f:id:kyomachiya:20181225124619p:plain


こんにちは、京町啓一です。

今回は Laravel5.7 を使ってログイン機能とユーザー登録機能を実装していきましょう。

実際に実装される方は、お時間に余裕を持ってくださいね。

開発している環境

OS:CentOS 7

WebServer:Apache 2.4

DBMS:MySQL

Laravel 5.7(PHP7.2 / 7.1)

※ ルートディレクトリは etude としていますが、適宜みなさんの状況に合わせて読み替えて下さい。

※ ルートディレクトリ:スタートなるフォルダ、プロジェクトフォルダと言われるものですね。

ログインとユーザー登録機能

データベースの作成



.env ファイルの変更



マイグレーションの実行

ルートディレクトリへ移動します。

マイグレーションを実行します。



これで、etude(データベース)の中に users、password_reset、migrations という3つのテーブル(表)ができることになります。

もう一度、MySQL にログインして、テーブルが無事に作成されているか見てみるのもよいでしょう。

データベース一覧を表示する: show databases;

データベース名があればOKです

データベースを選択する: use テーブル名;

どのデータベースを操作するかを明確にします。

テーブル一覧を確認する: show tables;

テーブルの一覧確認ができます。

テーブルの造り(構造)を確認する: show columns from テーブル名;

email など、どのようなデータを格納するテーブルなのかがわかります。

デーブルのデータを確認する: describe テーブル名;

テーブルに格納されているデータの詳細がわかります。

※ セミコロン( ; )をコマンドの最後に付け忘れやすいのでご注意を

ログインとユーザー登録機能の実装

ルートディレクトリへ移動します。

ログイン機能の実装コマンド



生成されるもの

HomeController.php

f:id:kyomachiya:20181225113334p:plain


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
}

routes / web.php 内へ自動追加されたコード

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

パスワードリセット

パスワードを変更したり、忘れたときのための機能ですね。

パスワードリセットはメール機能を利用する必要がありますので、色々と方法があります。

ここで紹介するのは、mailtrap というサービスを利用して、パスワードリセットの機能確認を行うだけのものになります。

本番環境やメール本文のカスタマイズなどをご検討の方は読み飛ばしてくださいませ。

mailtrap の利用準備とLaravel設定情報の確認

mailtrap へアクセスします

mailtrap.io f:id:kyomachiya:20181225175829p:plain


右上からログインまたは新規登録をしましょう。

新規登録の場合はこちらに進みます。

f:id:kyomachiya:20181225175836p:plain


ログインが完了するとこのような画面に進みます。

f:id:kyomachiya:20181225180042p:plain


Inbox という箇所をクリックしましょう。

f:id:kyomachiya:20181225175848p:plain


ドロップダウンの箇所で Laravel を選択しましょう。 その後、username、password をメモしていただくか、画面をそのままにしておきましょう。

Laravel 側の操作に戻ります。

.env ファイル

username、password をmailtrap のものと同じものを入力して保存しましょう。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=(あなたのusername)
MAIL_PASSWORD=(あなたのpassword)
MAIL_ENCRYPTION=null

Laravel での操作

では、ユーザー登録からパスワードリセットまでの操作をしながら、動作確認を行いましょう。

Laravel 画面から右上の register へ

f:id:kyomachiya:20181225175817p:plain


ユーザー登録をします。Confirm Password はパスワードの確認欄です。

f:id:kyomachiya:20181225175826p:plain


画面右上の login から ログインしてみましょう

f:id:kyomachiya:20181225175822p:plain


このような画面が出ればログイン完了です。

f:id:kyomachiya:20181225175814p:plain


一度ログアウトして、再度ログイン画面に移りましょう

今度は Forgot Your Password のリンクへ進みます。

f:id:kyomachiya:20181225175822p:plain


パスワードリセット用のメール送信を依頼する画面に移ります。

メールアドレスを入力すると、そのアドレス宛にメールが届きますが、今回は mailtrap を利用していますので、実際にみなさんが入力したアドレスにはメールは届きません。

mailtrap で送信ができるかどうかのテストをしています。

f:id:kyomachiya:20181225175853p:plain


mailtrap でメールの送受信確認

mailtrap へ戻っていただき、Inbox 内でこのような画面が確認できれば成功です。

f:id:kyomachiya:20181225175548p:plain


メール内の Reset Password をクリックすると、Laravel のパスワードリセットの画面に移ります。

AWS Cloud9 をお使いの場合

画面が移動しなければ、アドレスバーの localhost の部分を AWS Cloud9 の http://~ amazonaws.com/ の部分に置き換えてみてください。

Expected response code 250 but got code “530”, with message “530 5.7.1 Authentication required

php artisan clear cache

症状が改善することがあります。

Laravel でパスワードリセット

メールアドレスを入力して、新しい希望パスワードを入力しましょう。

f:id:kyomachiya:20181225175856p:plain


このような画面がでれば成功です。

f:id:kyomachiya:20181225175900p:plain


まとめ

今回は、Laravel を利用するメリットの一つ、ログイン機能、ユーザー登録、パスワードリセット機能の実装を行いました。

Laravel の認証機能はある程度のセキュリティ対策(インジェクション攻撃などに対する対策)が実装されています。

認証機能の実装方法は、今回紹介したものだけではなく、いろいろな方が様々な情報を提供して下さっています。

セキュリティに関しても同じように多くの情報がありますので、今回の実装をきっかけにして調査してみると良いでしょう。