EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

Laravel.20 ログイン機能、メール認証

前回、ログイン機能を実装。

chigusa-web.com

これでもかと手間取ったけど、何とか実装できました。

最終的にはcomposerから認証機能としては最小限のBreezeを導入した。

選択肢が多い上にうまくいかない選択肢もあって時間くってしまった。

が、コードは実質入力していないようなものなので、効率はものすごく良い感じ。

 

f:id:tenomeuonome:20220408005522p:plain

■ユーザ登録

このままではユーザがいないのでログイン確認もできない。

じゃぁ登録機能つくらなきゃ・・と心配する必要はなくて、

http://localhost:8000/register

でユーザ登録画面が起動する。いいの?

f:id:tenomeuonome:20220409040614p:plain

項目ラベルは調整が必要やね。

登録機能を一通り確認。

f:id:tenomeuonome:20220409041215p:plain

ユーザ情報を入力してregisterボタンを押下すると、

ログインした上でダッシュボード画面に移動する。

登録したユーザ情報は users テーブルに追加される。

 

非常に簡単。

しかし、これだと存在しないメールアドレスでも登録できるのでいくらでも偽造できてしまう。

qiita.com

prograshi.com

 

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

のエラー。

メールサーバとか構築していないので当然か?

 

■テスト用メールサーバ

chigusa-web.com

テスト用のメールサーバを用意する。

普通ならサーバでSMTPサーバを立ち上げて、テストするメールアドレスも必要な分用意する必要があるが、Mailtrapを使うとこの手間を軽減できる認識。

 

登録するとすぐSMTPサーバの情報が表示されて、そのまま使用開始できる。

各開発環境で利用でき、今回はLaravel 7+を選択する。

f:id:tenomeuonome:20220409051203p:plain

.envファイルにSMTPサーバのユーザ情報をコピペすれば完了。

f:id:tenomeuonome:20220409051556p:plain

改めてユーザ登録すると、mailtrap側に確認メールが送信された。

f:id:tenomeuonome:20220409052542p:plain

このままだと、確認用メールは届くが、メールから認証していなくても再度ログインできる。

できれば、メールからの認証が完了してからログイン可能になるようにしたい。

 

一応、確認メールの「Verify Email Address」ボタンを押下すると、usersテーブルの「email_verified_at」フィールドに認証時の日時がセットされた。

あとはこの値をログイン時に入っているかどうか判定させたい。

tech-tech.blog

どうやらLaravel的には、メール認証していなくてもログインはできる、が機能は制限するという方針のよう。

それでもログイン時に制限も可能なようだが書き方が分からず。

まぁ、ログインした時にセッションにメール認証済かどうか保持して判定すれば良いか。

 

ひとまずここまで。