ひとりまとめ

もろもろのメモ

CakePHP パスワードが自動で$this->dataに埋まる

先日発売された「CakePHPによる実践Webアプリケーション開発」という本を、さっそく購入してみました。自分にとって、とってもタイムリーだったためかなり飛びつき気味で。

現在半分くらいまで進んでいるところですが、丁寧に書かれている印象でわかりやすいです。取り上げられている例も、実際作るときによくある感じで応用しやすいというか。


で、順調かと思いきや、いつものように詰まり。
ユーザー情報を変更する場面で、パスワードは必要なときだけ変更し、なにも入力されてなければスルーしてチェックしないという処理をやってみてました。

処理内容としては当たり前に「パスワード」と「パスワード(確認用)」のどちらもが空ならvalidateからはずす ということをしているのですが、これを自分が作りかけのプログラムにいれてみると思ったように動いてくれません・・・。どちらも空白にしてるのに「パスワードと確認用とが一致しない」と言われてしまうんですよね。


で、ベタにeditアクション(validateとか登録とかの処理をする)の最初で$this->dataを表示してみたところ、この時点で入力ページでは空のはずのパスワード部分に暗号化された文字列が埋まってる!!
試しにパスワード欄に文字を入れると、その文字を暗号化した文字列が入ります。そして、空白にすると「元のパスワードを暗号化した文字列」が入ります。


入力ページのパスワード欄のnameをpassword以外の名前に変更し、必要に応じてpasswordフィールドに移し返す なんていうやりかたで逃げてみましたが、どうにもあからさまに邪道っぽい気がする。。。


考えようによっては、「空白にすると、元のパスワードを暗号化した文字列が入る」という挙動は、「パスワードを入力してログインしておきながら、なんで毎回パスワードを入れさせるんだこの・・・ド低脳がァーーッ!」なんていう気分の時には楽ちん。だからそうなってるのかなぁ。


本との違いは
・作りかけの自分のソースに組み込んでいたので、bakeもscaffoldも使ってない
・authコンポーネントも最初からいれてた

なんら解決してないものの、ひとまず備忘録。