Help us understand the problem. What is going on with this article?

これから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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away