cakephpのAuthComponentを利用した際のパスワードの更新

cakephpのauth機能を利用した確認画面を挟んだパスワードの登録

ちょっと、というかかなり悩んだのでメモを残します。
AuthComponentは自動でログインやセッションなどを処理してくれるのですごく便利です。
しかし、登録されているログインパスワードを修正するときにつまずきました。。。

更新フォームで表示している「password」は既に暗号化されているので、
パスワードの内容を修正しないで更新ボタンを押してしまうと、さらにそこに
暗号化の処理がかかってしまい、もう、わけわかんなくなっちゃいます・・・orz

同様に躓いてらっしゃる方も多く、情報もたくさんあったのですが、
私の理解できる方法で対処しました。
結論から言うと「password」フィールドの他に「org_password」というフィールドを作って対処しました。
フォームでは「org_password」を表示して入力させ、登録時には「org_password」には文字列を登録して
「password」には暗号化した文字列を登録するといった方法です。

設定したこと

データベースに「password」の他に「org_password」というフィールドを追加し、モデルを設定しておきます。
ビューには「org_password」フィールドのフォームを表示させます。

コントローラーの登録部分に「$this->Auth->password()」を使って暗号化をして
「password」に登録する処理を記載します。

[php]
//app/controller/users_controller.php
//完了画面と処理
function complete(){
//チェックと送信
if (!empty($this->data)) {
//パスワードを暗号化
$this->data[‘User’][‘password’] = $this->Auth->password($this->data[‘User’][‘org_password’]);
if ($this->User->save($this->data)) {
}else{
//エラー時の処理
}
}
}
[/php]

おそらくこの他にも更新の際は入力値が変わっていなければ暗号化しないなどの
処理もあるかと思われますが、とりあえず私はこの方法で回避しました。