Laravel.20 ログイン機能、メール認証
前回、ログイン機能を実装。
これでもかと手間取ったけど、何とか実装できました。
最終的にはcomposerから認証機能としては最小限のBreezeを導入した。
選択肢が多い上にうまくいかない選択肢もあって時間くってしまった。
が、コードは実質入力していないようなものなので、効率はものすごく良い感じ。
■ユーザ登録
このままではユーザがいないのでログイン確認もできない。
じゃぁ登録機能つくらなきゃ・・と心配する必要はなくて、
http://localhost:8000/register
でユーザ登録画面が起動する。いいの?
項目ラベルは調整が必要やね。
登録機能を一通り確認。
ユーザ情報を入力してregisterボタンを押下すると、
ログインした上でダッシュボード画面に移動する。
登録したユーザ情報は users テーブルに追加される。
非常に簡単。
しかし、これだと存在しないメールアドレスでも登録できるのでいくらでも偽造できてしまう。
app\Models\User.php
-class User extends Authenticatable
+class User extends Authenticatable implements MustVerifyEmail
登録すると、Connection could not be established with host "mailhog:1025": stream_socket_client(): php_network_getaddresses: getaddrinfo for mailhog failed
のエラー。
メールサーバとか構築していないので当然か?
■テスト用メールサーバ
テスト用のメールサーバを用意する。
普通ならサーバでSMTPサーバを立ち上げて、テストするメールアドレスも必要な分用意する必要があるが、Mailtrapを使うとこの手間を軽減できる認識。
登録するとすぐSMTPサーバの情報が表示されて、そのまま使用開始できる。
各開発環境で利用でき、今回はLaravel 7+を選択する。
.envファイルにSMTPサーバのユーザ情報をコピペすれば完了。
改めてユーザ登録すると、mailtrap側に確認メールが送信された。
このままだと、確認用メールは届くが、メールから認証していなくても再度ログインできる。
できれば、メールからの認証が完了してからログイン可能になるようにしたい。
一応、確認メールの「Verify Email Address」ボタンを押下すると、usersテーブルの「email_verified_at」フィールドに認証時の日時がセットされた。
あとはこの値をログイン時に入っているかどうか判定させたい。
どうやらLaravel的には、メール認証していなくてもログインはできる、が機能は制限するという方針のよう。
それでもログイン時に制限も可能なようだが書き方が分からず。
まぁ、ログインした時にセッションにメール認証済かどうか保持して判定すれば良いか。
ひとまずここまで。