質問: php初心者です。 実現したいことがあり、皆様の知恵をお借り出来たらと思います。 MVCでちょっとしたWebアプリケーションを作っています。 今回はそのアプリケーションのログインのロジックについてご教授いただきたいです。 ### 実現したいこと LoginViewで入力してもらったidを、 LoginControllerで受け取り、 受け取ったidをFirstLoginViewに送り、 FirstLoginView内で使用し、 更に、FirstLoginControllerに送りたい。 ### 現状の処理の流れ 前提:ユーザは自分固有のIDとランダム生成されたパスワードがメールで送られてくることとします。 (尚、セキュリティ面についてはまだ未熟な部分もある為、考慮できていないのが現状です...。) 今回はその中でも初回登録画面の処理についてご教示いただきたいです。 処理の流れは 1.ログイン画面にidとパスワードを入力してもらい、入力された値をPOSTでCに送る(LoginView) 2.入力された値を元にデータベースを参照し、idとパスワードが一致した場合はメイン画面へリダイレクトさせます。 もしデータベースを参照し、そのユーザが初回ログインだった場合のみDBにログイン状態のステータス値が格納されています) 初回登録画面へと遷移します。(LoginController) 3.ユーザに自分の好きなパスワードを入力してもらい、POSTでCに送ります(FirstLoginView) 4.受け取ったパスワードを元にUPDATEクエリを作成し実行します(FirstLoginController) ### 解決方法...? 【実現したいこと】のすべてを満たす解決方法として素人なりに考えてみたのが **LoginControllerとFirstLoginControllerを1つのControllerとしてまとめてしまう** という方法です。 LoginControllerで一回idを受け取ってしまえば、あとはその値変数にいれ、変数を利用してFirstLoginControllerの処理をしてしまえば良い。 SQL文のWHERE句に当てはめるのもその変数を連結してしまえばいい。 ...かなり無茶苦茶だとは承知していますが、私の頭ではこれ以外の選択肢が見つかりません。 ### 上記以外に解決できそうな方法 ・セッションID セッションIDを利用し、idを持ち歩いてもらう方法です。しかしこれをFirstLoginViewで表示させる場合、どうやらphpを使う方法が一般的なようですが .htmlから.phpに拡張子が変わった場合サーバーサイド処理となってしまうようです。 .htmlの中でphpを動かす場合.htaccessの設定を書き加えることによって可能らしいのですが、理解が及ばず本当にそれで実現可能なのかわかりません。 ・LoginControllerからFirstLoginViewにリダイレクトする際にidの値を一緒に渡す これに関しては調べ方が悪いのか、実現方法を見つけることができませんでした。json形式で...というのも考えましたがLoginControllerにFirstLoginView側からリクエストを送るのか...??とこんがらがっています。 全体的に自身の知識不足からくる疑問で申し訳ありません。 長文となりましたが、なにか解決の糸口やアドバイスなどあればご教示いただきたいです。 宜しくお願い致します。
回答: 【ログイン機能】 LoginController actionとして、 index(ログイン画面) firstlogin(初回登録画面) 【トップページ】 ToppageContolloer index(トップページ画面) とするのがいいかと思います。 ログイン機能の indexアクションで 初回ログインの場合はfirstloginのviewに飛ばして それ以外はtoppageに飛ばせばいいと思います。 もちろんログインエラーの場合はLoginControllerのindexのviewにエラーを持たせてそのまま飛ばせばいいかと。 ログイン情報はセッションで持ち回り 各画面のトップでセッションログインチェックをして セッションがなければログイン画面に飛ばしてやればいいと思います。