Edited at

これからWeb開発のバックエンドを学ぶ in 2018(PHP7編)|パスワードリセット

More than 1 year has passed since last update.

これからWeb開発のバックエンドを学ぶ in 2018(PHP7編 - 2.3日目)|CRUDアプリが出来たの続きです。


以前作ったLaravel5.6で認証機能

以前、Laravel5.6で認証機能を作成しました。

これからWeb開発のバックエンドを学ぶ in 2018(PHP7編 - 0.72日目)|認証

php artisan make:auth --views


パスワードリセットを動かすとエラーで動かない

その後、パスワードリセットを動かした事が無かったので、やってみたらエラーになりました。

スクリーンショット 2018-03-26 21.51.08.png


エラーその1

Swift_TransportException (530)

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

???


エラーその1の対処法

どうも調べてみると、gmail宛てにメール送信するには、

.envファイルのメーラー設定をgmail用のSMTPサーバの設定に変更しなければならないようです。


.env

MAIL_DRIVER=smtp

-MAIL_HOST=smtp.mailtrap.io
+MAIL_HOST=smtp.gmail.com
-MAIL_PORT=2525
+MAIL_PORT=587
-MAIL_USERNAME=null
+MAIL_USERNAME=xxxx@gmail.com //自分のメールアドレス
-MAIL_PASSWORD=null
+MAIL_PASSWORD=hogehoge //自分のメールアドレスのパスワード
-MAIL_ENCRYPTION=null
+MAIL_ENCRYPTION=tls //メールサーバへの認証を暗号化

えいっ!


エラーその2

Swift_TransportException (535)

Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials t25sm11378844pfk.69 - gsmtp "

Oops...なんぞこれ?


エラーその2の対処

どうやらGoogleアカウントの設定で、「安全性の低いアプリによるアカウントの使用を許可する」をONにしないと動かないらしい。

スクリーンショット 2018-03-26 22.35.35.png


  • OFF -> ON

スクリーンショット 2018-03-26 22.37.36.png

根本的に安全性の高いアプリにするには、Googleアカウントの2段階認証をONにして、

アプリ用のパスワードを発行し、MAIL_PASSWORDに設定するらしいのだが、

今回は割愛して、ていやっ!


  • 画面

スクリーンショット 2018-03-26 22.01.02.png


  • メール

スクリーンショット 2018-03-26 22.01.13.png

いけました!リセット用のリンクが貼られたメールが送られてきました!

そして、リセットリンクをクリック! とりゃっ!


エラーその3

スクリーンショット 2018-03-26 22.03.46.png

むむむ???? 何かルーティングがおかしいのか? まずはルーティングを確認

docker-compose exec  workspace php artisan route:list | grep password

| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |

password/reset/{token}のルーティングはちゃんと用意されている。

では、ResetPasswordControllerにshowResetForm()が無いとか??


app/Http/Controllers/ResetPasswordController.php

class ResetPasswordController extends Controller

{
use ResetsPasswords; // この中にshowResetForm()が定義されてた
・・・・・

ふむ、問題なさそうだ。ではなんだ?

スクリーンショット 2018-03-26 22.09.40.png

おや?ポートはlocalhost:8080なのに、ポート設定が無い!どこかに設定追加が必要なのか!


エラー3の対処法

.envファイルのURL設定にポートを付け加えた


.env

-APP_URL=http://localhost

+APP_URL=http://localhost:8080


パスワードリセットが動いた


  • メールのリンク押したらリセット画面が表示された

スクリーンショット 2018-03-26 22.15.38.png


  • リセットしたら、そのままログイン後に表示されるホーム画面が表示された

スクリーンショット 2018-03-26 22.16.01.png

無事、動作確認ができた。

リセット用のメール本文が英語になってるけど、文言で検索したら該当箇所が出てきたので、

そこを翻訳対応すれば日本語に出来そうだ。


自宅サーバで公開した作成アプリ

書籍リスト


勉強で作ってみたプロジェクトのソース

https://github.com/masaaki-uegaki/bookapp