CakePHP備忘録3 Authを使いながらパスワードの変更を行う

【CakePHP1.3.2】
ログインパスワードを変更する場合の入力項目は、

  1. 現在のパスワード
  2. 新しく設定したいパスワード
  3. 確認のためパスワードを再入力
…というのが一般的だと思います。


これをCakePHPで行なおうとする場合、Authコンポーネント
ハッシュ化されたパスワードの扱いが問題になると思います。


【例1:失敗】

//現在のパスワードを確認
$user = $this->User->read();
if(
$user['User']['password']
!=
$this->Auth->password($this->data['User']['password_confirm'])
){
//パスワード不一致
$this->Session->setFlash('現在のパスワードが間違っています。');
return;
}


【例2:成功】

//現在のパスワードを確認
$login['username'] = $this->Session->read('Auth.User.username');
$login['password'] = $this->Auth->password($this->data['User']['password_confirm']);
if(!$this->Auth->login($login)){
//パスワード不一致
$this->Session->setFlash('現在のパスワードが間違っています。');
return;
}


【疑問】
ハッシュ化は不可逆で、実行されるたびに結果も変わるのだそうです。(実行結果は変わりません。)
ですから、例1がうまく動かないのはわかるのですが…。
なぜ、例2の、loginメソッドで間接的に比べた場合はうまくいくのか。
auth.phpのソースを読んでみましたが…、さっぱりわかりませんでしたorz


しかし、とりあえずはうまくいってるわけですから、このままにしておきます。