Ikeda's Blog

Laravelでブログサイトを作る 06. Laravelに認証機能を導入

はじめに

前回の作業を完了し、http://192.168.56.10/にアクセスすると、Laravelのwelcome画面が表示されることを前提に進めます。

導入

認証には、Laravel Jetstreamを使用します。
インストールは、composerとnpmを使用して行います。

# [コメント]サーバ内の作業ディレクトリへ移動します
$ cd /home/vagrant/blog

# [コメント]インストール実行
$ composer require laravel/jetstream
$ php artisan jetstream:install livewire --teams
$ npm install
$ npm run dev

# [コメント]必要なテーブルを作成します
$ php artisan migrate

ユーザの登録

http://192.168.56.10/registerにアクセスすると、登録画面が表示されます。

名前、メールアドレス、パスワードを入力し、「REGISTER」ボタンをクリックすれば登録は完了です。

http://192.168.56.10/loginからログインできるか試してみましょう。

2要素認証

2要素認証(メールアドレスとパスワードの知識要素と、スマートフォンを使った所有要素)でのログイン制御が可能です。それも、かなり簡単に。

1. アプリインストール【スマートフォン側で作業】

公式が案内している、「Google Authenticator application」をスマートフォンにインストールします。
Android:Google認証システム
iPhone:Google Authenticator
名前は違いますが、どちらも同様のアプリ、のはずです。(私がiPhoneを所有していないので、そちらは未確認です)
インストールしただけではまだ何もできないので、そのままスマートフォンは一旦置いておきます。

2. サイトのユーザ設定を変更【PC側で作業】

ログイン後、ダッシュボードの右上から「Profile」を選択します。

「Two Factor Authentication」のところで、ENABLEをクリックします。

3. アプリを起動し、QRコード読み込み【スマートフォン側で作業】

アプリを起動し、「QRコードをスキャン」を選択します。
後は、上記2の後に表示されたQRコードを、カメラで読み取ります。

「アカウント追加」ボタンを押しておけば、アプリにこのサイトが記憶されます。
これで、準備は完了です。

4. ログインしてみる【PC側で作業】

試しに、一度ログアウトして、もう一度ログインします。
メールアドレスとパスワードを入力してログインボタンを押すと

コードの入力画面が表示されます。

ここに、アプリで表示される6桁の数字を入力することで、初めてログインが完了するようになりました。

ユーザの登録をできないようにする

今回制作するのは、自分だけが管理画面にアクセスできれば良いので、登録画面へのアクセスをできなくしてしまいます。
config/fortify.phpの最後の方にある、Features::registration(),の行をコメントアウトしてしまいます。
すると、登録画面にアクセスしても、404 NOT FOUNDになります。
他のメニューも、必要に応じてコメントアウトしても構わないでしょう。

    'features' => [
        //Features::registration(), // 登録。今回コメントアウトするもの。
        Features::resetPasswords(), // パスワードリセット。
        // Features::emailVerification(), // メール認証。デフォルトでコメントアウト済み。
        Features::updateProfileInformation(), // プロフィール更新。
        Features::updatePasswords(), // パスワードの更新。
        Features::twoFactorAuthentication([ // 2段階認証
            'confirmPassword' => true,
        ]),
    ],