技術メモTwitterFacebookはてブPocketLINE2020.02.05スポンサーリンク今回はLaravelでメールアドレスを変更する方法について、わかりやすく説明していきます。コピペで実装できるようにコードをまるごと掲載していきます!今回実装するメールアドレス変更機能の流れは以下の通りです。Verificationを使用すると新しいメールアドレスを入力した際に古いメールアドレスは上書きされてしまいます。Verificationは使えないので自前で実装していきます。6.13.1Composerはすでにインストールしているとします。メールアドレス変更の前準備すでにプロジェクトを作成している場合は省略してください。新規プロジェクト作成まずは新規プロジェクトを作成します。EmailChangeSampleプロジェクトのカレントディレクトリに移動して、ローカル開発サーバを立ち上げます。servehttp://127.0.0.1:8000にアクセスします。ページが正常に表示されていればOKです。認証機能作成コマンドで簡単に認証機能を作成します。6.0以降は認証機能実装手順が変更されているので注意してください。REGISTERが追加されます。マイグレーションしてテーブル作成&テストデータ挿入シーダーファイルを作成し、以下のように修正します。}}DatabaseSeeder.phpを以下のように修正します。}}テーブルを作成して、データを挿入します。--seedDBの状態はこんな感じです。LOGINからメールアドレスとパスワードを入力すると無事ログインできました。これで準備は完了です。メールの受信テストの準備メールを送信するためメールサーバーが必要ですが、今回はテスト送信で済ませるので、MailHogを使用します。MailHogはメールのテストツールです。MailHogをインストール&起動します。mailhogLaravel側は.envの設定を以下のように修正します。MAIL_PORT=2525MAIL_PORT=1025MAIL_USERNAME=nullMAIL_PASSWORD=nullMAIL_ENCRYPTION=nullMAIL_FROM_ADDRESS=sender@example.comMAIL_FROM_NAME="${APP_NAME}".envの設定を変更したのでキャッシュをクリアしておきます。config:cache以下のURLにアクセスしてMailHogの画面が表示されれば成功です。http://localhost:8025/メールアドレス変更機能を実装メールアドレス変更機能は以下のフローで実装します。1新しいメールアドレスと発行したトークンを保存するテーブル(email_resets_table)を作成2ユーザーがフォームから新規メールアドレスを送信したらトークンを発行。email_resets_tableに新規メールアドレスと発行したトークンを格納する3ユーザーにメールアドレス確認メールを送信する4ユーザーがメールアドレスのリンクをクリックしたら、トークンが一致するか確認5トークンが一致していた場合、ユーザーのメールアドレスを更新それではひとつひとつ実装していきます。メールアドレスリセット用テーブルを作成まず新しいメールアドレスと新規で発行したトークンを保存するためのテーブルを作成します。create_email_resets_tableまた、作成したcreate_email_resets_table.phpを以下のように修正します。}}マイグレーションを実行します。--seedDB内にemail_resetsテーブルが作成されています。同様にモデルも作成します。EmailReset作成したEmailReset.phpを以下のように修正します。];}メールアドレス変更用のフォームも作成しておきます。home.blade.phpにフォームを追加します。</div></div>@endsectionメールアドレスリセット用テーブルにメールアドレスとトークンを保存する処理を記載web.phpにルーティングを追加します。'ChangeEmailController@sendChangeEmailLink');ChangeEmailControllerを作成します。ChangeEmailController作成したコントローラー内にsendChangeEmailLinkメソッドを作成します。このメソッドは新規メールアドレスと発行したトークンをDBに保存して、メールアドレス確認リンクを送信します。'確認メールを送信しました。'メール更新に失敗しました。}ここではhash_hmac関数を使用してハッシュ値を生成して、これをトークンとしています。sendEmailResetNotificationメソッドは後ほど作成します。ユーザーに確認メールを送信するEmailReset.phpにsendEmailResetNotificationとrouteNotificationForMailメソッドを定義します。}}通知(notification)を作成します。ChangeEmail上記のコマンドを実行すると、appディレクトリ直下にNotificationsディレクトリが作成されます。Notificationsディレクトリ直下のChangeEmail.phpを以下のように編集します。}}次にメールの文言を記載するbladeを作成します。resources/viewsディレクトリ直下にemailsディレクトリを作成して、changeEmail.blade.phpを作成します。changeEmail.blade.phpを以下のように修正します。__('下記のURLをクリックして新しいメールアドレスを確定してください。__('※URLの有効期限は一時間以内です。有効期限が切れた場合は、お手数ですがもう一度最初からお手続きを行ってください。}}<br></p>これでメール送信の準備が整ったので、メールを送信してみます。test@gmail.comと入力して送信します。アクセスして更新ボタンを押すと、test@gmail.comあてのメールを受信できていることがわかります。email_resetsテーブルを確認すると、新しいメールアドレスと発行したトークンが格納されていることがわかります。これでメール送信は完了しました!受信したメール内のリンクをクリックしてメールアドレスを更新する最後にユーザーが受信したメール内のリンクをクリックしたら、メールアドレスを更新する処理を記載します。web.phpにルーティングを追記します。"ChangeEmailController@reset");ChangeEmailControllerにresetメソッドと、tokenExpiredメソッドを作成します。'メールアドレスの更新に失敗しました。}まず最初にemail_resetsテーブルの中で、トークンが一致しているレコードを取り出します。その後、レコードが取り出せているか、トークンの有効期限が切れていないかをチェックしています(今回は有効期限を60分に設定)。問題がなければユーザーのメールアドレスを更新して、email_resetsテーブルのレコードを削除します。これでメールアドレス更新機能の完成です!実際にメールアドレスを更新してみる実装したメールアドレス更新機能を使って、実際にメールアドレスを更新してみます。最初のメールアドレスはtanaka@example.comです。これをtest@gmail.comに変更したいと思います。フォームにtest@gmail.comと入力して、送信ボタンをクリックします。この時点ではまだメールアドレスは更新されていません。http://localhost:8025/にアクセスして、受信メールのリンクをクリックします。リンクをクリックすると、メールアドレスが更新されます。usersテーブルを確認すると、メールアドレスがtest@gmail.comに更新されているのが確認できます。おつかれさまでした!今回作成したサンプルはGitHubにあげているので、興味のある方は参考にしてみてください。GitHub.github.com今回はLaravelにてメールアドレスを変更する方法について解説しました。実務未経験からwebエンジニアとして転職しようとする際にこのような話を聞くことが多いと思います。本番環境と開発環境を使い分けたいときに、.envの値を取得する場合があると思います。エラーの解消法Flutterを使用してアプリ開発を行っている際に以下のエラーが発生しました。今回はメールアドレスを入力せずにパスワードを変更する方法について、わかりやすく説明していきます。Laravelにデフォルトで実装されているパスワ...技術メモ【PHP・Laravel】json_decode()がNULLを返したので、原因を特定して解消LaraveでAPIを作成して、そのAPIに下記のJSON形式のデータをpostしました。その時にjson_decode関数でデコードした際にNULLを返したので、原因を特定して解消しました。runでアプリを実行した際にエラーが発生しました。パッケージの依存関係でエラーを起こしています。エラーを解消Flutterを使用してアプリ開発を行っている際に以下のエラーが発生しました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト自己紹介とんでもくん元ギター屋のWebエンジニアブロガー。新卒入社した企業を一年で退職し、楽器メーカーへ転職して海外に駐在。その後未経験からWebエンジニアに転職しました。20代中盤ですが2回転職し、その経験を活かして当ブログで転職情報(IT&楽器業界)を発信。音楽好きでもあり、趣味全開の音楽情報も発信中。転職&音楽情報なら「やばブロ!」でチェケラッ記事執筆依頼も受け付けておりますので、お気軽にお問い合わせくださいませ。Gnu(キングヌー)メンバーを徹底紹介。自己紹介とんでもくん元ギター屋のWebエンジニアブロガー。新卒入社した企業を一年で退職し、楽器メーカーへ転職して海外に駐在。その後未経験からWebエンジニアに転職しました。20代中盤ですが2回転職し、その経験を活かして当ブログで転職情報(IT&楽器業界)を発信。音楽好きでもあり、趣味全開の音楽情報も発信中。転職&音楽情報なら「やばブロ!」でチェケラッ記事執筆依頼も受け付けておりますので、お気軽にお問い合わせくださいませ。Gnu(キングヌー)メンバーを徹底紹介。(13)スポンサーリンク。