Fippiyのプログラム学習内容アウトプットBlogスマートフォン用の表示で見るFippiyのプログラム学習内容アウトプットBlog日々の学習内容をアウトプットして振り返りを実施する。この広告は、90日以上更新していないブログに表示しています。2019-04-21Laravel開発、ユーザー情報を編集する【2】ユーザ情報更新を個別に扱う前回でユーザー名とパスワードの変更処理はできるようになりました。実装を行ってみて問題点に気づいたので、こちらを解決していきます。前回の記事はこちらfippiy.hatenablog.jp今回の目的なぜやるかやりたいことやったこと実施内容パスワード処理の課題を整理する前回の課題を確認するユーザー情報更新の手順を変更するマイページの表示を変更するマイページトップ画面を編集する編集ビュー設置のためのコントロールを再定義するedit画面を再編集するユーザー名編集画面を再定義する各カラムに対応したフォームを表示する現在のパスワードを認証する残っている問題点を解決するフォームを追加するパスワード認証を実装するパスワード認証結果をバリデーションエラーに表示するバリデーションエラーを表示させる今回の目的ユーザー情報編集フォームから送信した内容をバリデーションによって正しいデータのみ処理できるようにしたいパスワード変更時に現状のパスワードによる認証をしたいなぜやるかフォーム入力全データバリデーションを使用すると、意図しないバリデーションエラーとなっているので、対処するため現状パスワード認証処理をすることで、ログインユーザーであることを確認して新パスワードへ移行する処理とするためやりたいことユーザー情報毎に編集できるようにして、個別にバリデーションを設定したい現状のパスワードを認証する仕組みを実装したいやったことindexページから各カラム情報編集の導線を作成するカラム別にユーザー情報を編集できるようにするeditビューひとつで各カラム編集に対応する現在のパスワードを認証するカスタムバリデーションを作成する実施内容パスワード処理の課題を整理する前回の課題を確認する前回記事の最後に上げた課題はこちらです。ユーザーのパスワード変更作業を実装していました。バリデーションに文字数制限を入れていない為1文字から設定できてしまう8文字以上設定にすると0文字で更新対象外とならなくなる(入力必須)現在のパスワードを確認せずに新パスワードでいきなり更新されるまず1と2です。文字数制限をいれるのは簡単ですが、制限することによって空欄時の対象外とする処理ができなくなります。両方の条件に一致するバリデーションを試行錯誤しましたが、うまくいきませんでした。正規表現等で表現できればできそう...ですが、そこまでしてバリデーションに2つの条件をまとめる必要があるのか?という疑問もあります。こちらは、結果として私が考慮してなかっただけですが...。パスワード更新時に現在のパスワードを確認する工程をいれてなかったので、追加実装したいと考えています。ユーザー情報更新の手順を変更する問題1と2を解決します。現在のフォーム構造はユーザー情報(名前・メール・パスワード)を一つのフォームに表示し、変更があった情報を全て更新する...といった想定をしていました。バリデーションが複雑になってきたので、全データ編集をやめて、各カラム毎に編集して更新するといった形式に変更することにしました。することで、個別に編集フォームからデータを送信し、そのデータに対してのみバリデーションするので結果として記述が簡単な内容になります。編集フォームについては、カラム毎にビューを用意する手順を考えましたが、ビューファイル、アクション共に3つ作成となります...が、ここでは編集フォームページを1つにして、条件によって対象の編集フォームだけを表示するという方法にすることにしました。編集ページへのリンクについても、メニューに表示している編集ボタンを廃止し、indexページのユーザー情報に対して編集ボタンを用意し、そこから個別に編集画面を表示させる...といった手段をとることにしました。以上で実装を行っていきます。マイページの表示を変更するマイページトップ画面を編集するまずは、トップページの表示を変更します。}}">編集</a></div></div>ユーザー情報一覧表示ページにカラム毎に編集ボタンを設置して、ここから個別に編集することとし、リンクを設置しました。ここでroute情報にnameという第二引数を設定しています。これを利用して編集画面で変更するカラムのフォームのみ表示するという形にします。編集リンクを個別に設置したことにより、変更したいデータのみ編集する導線を確立しました。マイページメニューから編集へ移動する必要がなくなったので編集メニューは削除してます。パスワード編集のボタンが必要となるため、パスワード項目を追加してますが、表示はしないことにしました。編集ビュー設置のためのコントロールを再定義する次にユーザーeditページを編集していきます。]);}編集画面を表示させるためのeditアクションについては、標準仕様から外れる為、新たにusereditアクションに再定義しました。ビューで設定した引数をpageとして取得して、編集を行うカラムを選択できるようにしています。['edit']]);});コントローラーの修正に伴ってルートも変更しています。edit画面を再編集するユーザー名編集画面を再定義するeditビューを修正していきます。各編集ボタンに対応したフォームのみ表示する...といった方法にしていきます。ユーザー名のみでフォームを再作成します。value="編集"></div></form>@endifindexページの編集ボタンで$pageを定義していたので、$pageの内容によって表示するフォームを変更しよう...という考えです。route情報にnameという第二引数を渡していたので、$pageの内容によってフォームが表示できます。nameのみ実装しましたが、ここに他のページも追加することで全カラムに対応しようというものです。redirect('/user');}保存処理です。ここでページによってバリデーション選択を変更することで、編集に応じた対応ができるようにしました。'confirmed|min:8');こちらがそのバリデーションです。選択したフォームに対するバリデーションのみを設定しているので、他のカラムの条件を考える必要がなくなった為、シンプルに設定できるようになりました。パスワードについては、確認フォームと一致すること、8文字以上という条件をしっかり指定ができています。フォームを個別にしたことにより未入力=変更処理なしという点については考える必要がなくなりました。各カラムに対応したフォームを表示する編集フォームのif分岐をform全体にいれていましたが、ユーザー名など、各カラムの部分だけが異なっている状態でしたので、ifの範囲を変更しました。アクション指定はおなじ、page名は変数でとれるので、form-groupクラス内だけ書き換えることで対応しました。value="編集"></div></form>これでも問題なく動作しました。動作確認もできたので、残りのフォームも追加します。value="編集"></div></form>これでフォームひとつでそれぞれのカラムに対しての編集ページがでるようになりました。以上で、個別カラム毎のデータ編集ページを作成することができました。パスワードに対してのバリデーション指定もシンプルになっています。現在のパスワードを認証する残っている問題点を解決するパスワードとパスワード確認に対してのバリデーション設定はできました。パスワード変更時には現在のパスワードを認証した上で新パスワードへの変更といった処理がありませんので、追加していきます。フォームを追加する新しいパスワードと確認のフォームしかない状態でしたので、現在のパスワードを入力する欄を追加します。value=""></div></div>old_passwordとして追加しました。パスワード認証を実装する認証方法について調べてみたところ、こちらを参考にさせて頂きました、ありがとうございます。readouble.comテキスト認証をする場合、フォーム入力テキストとDBの内容をチェックすればいいのですが、今回の場合ここに一手間必要となります。DBに登録されているパスワードは暗号化されているため、そのまま比較してもテキスト内容が異なる為、比較できません。そこで、ハッシュチェックを利用して、チェックすることにしました。falseで結果が返ってきます。あとはfalse時に変更処理をしなければ良いということになります。パスワード認証結果をバリデーションエラーに表示するバリデーションエラー時は$errorsにエラー内容が反映されて元のページにリダイレクトされます。現在のパスワード認証についても、バリデーションエラーとして返すことによって、リダイレクト処理とエラーメッセージ表示を同時に実装できると思い、実装することにしました。今までのバリデーションは入力したテキストに対してのチェックをしていました。今回はテキストではなく、ハッシュチェックを行った結果に対してバリデーションチェックさせます。バリデーションチェックの手順について改めて確認しました、こちらを参考にさせて頂きました、ありがとうございます。readouble.com"accepted"によるチェックとして、false時にはエラーとする処理として作成しました。'accepted']);バリデータを使用して、先程の結果を入れ、trueの場合は問題なし、falseの場合はバリデーションに引っかかりNGとなります。redirect('user/password')->withErrors($validator)->withInput();}バリデーションエラー時は、エラーメッセージを返して、リダイレクトさせます。バリデーションエラーを表示させるパスワード認証は今回カスタム作成しました。カスタムバリデーションのエラーメッセージの表示をどうするのか確認したところ、バリデーターの第3引数にセットすればいいようです。['現在のパスワードが一致しません']);第3引数にメッセージを追加しました。表示エラー表示バリデーションが適用され、エラーメッセージがでました。後は、エラーメッセージの表示を調整します。以上で現在のパスワードに対する認証ができるようになりました。以上で、編集ページ内のパスワードまわりの設定が完了しました。次は、メールアドレスの編集処理を行っていきます。21:20Laravel開発、ユーザー情報を編集する【2】ユーザ情報更新を個別に扱うTweet広告を非表示にする関連記事2019-05-12Laravel開発、propertyテーブルをテストする【5】編集エラーテストを実装するpropertyテーブルが関係するテストを実装しています。編集エラ...2019-04-29Laravel開発、bookdataテーブルをテストする【1】正常動作を確認するアプリのテストを行うことで、動作の確認を実施しています。stashを扱うユーザー情報のページを作成していた時のことですが、記事とし...2019-04-24Laravel開発、ユーザー情報を削除するユーザーの情報を扱うページを実装しています。»プロフィールid:Fippiy日々の学習内容をアウトプットして振り返りを実施する。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事VBAプログラム開発、スクレイピング・一覧取得【4-1】オブジェクト名を設定するVBAプログラム開発、スクレイピング・詳細データ取得拡張【4】書籍一覧処理の残工程を整理するVBAプログラム開発、スクレイピング・詳細データ取得拡張【3】未取得書籍のみデータ取得するVBAプログラム開発、スクレイピング・ログイン機能【2-6】既存モジュールから共通部をクラスモジュール適用に変更するVBAプログラム開発、スクレイピング・ログイン機能【2-5-2】共通処理をクラスモジュール化する(ログイン処理)月別アーカイブはてなブログをはじめよう!Fippiyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。