ログイン等の処理の場合は、明示的にパスの一致を調べる必要はないけれども、ユーザが後からパスワードの変更なんかをする場合は、viewで入力されたパスとDB内のハッシュ化されたパスの一致を調べる処理が必要になる。
このような場合は、BlowfishPasswordHasherのcheckメソッドを使って、一致の検証を行うことが出来る。
一致の調べ方で地味に詰まったのでメモ。
とりあえず、ユーザの現在パスはhogeだとし、ユーザIDはAuthから取ってくる。
また、$this->request->data['old_pass']には、viewから入力されたパスが入っているとする。
<?php //UsersController.php public function checkPassword() { $passwordHasher = new BlowfishPasswordHasher(); $current_pass = $this->User->getPasswordById($this->Auth->user('id')); //パスワードの正誤判定 if ($passwordHasher->check($this->request->data['old_pass'], $current_pass)) { //パスが正しい場合の処理 } else { //パスが正しくない場合の処理 } }
<?php //User.php //該当ユーザのハッシュ化されたパスワードを返す public function getPasswordById($id) { $user = $this->find('first', array( 'conditions' => array('User.id' => $id), 'fields' => 'password' )); return $user['User']['password']; }
viewでhogeと入力されていれば正しい場合の処理が、piyoと入力されていれば正しくない場合の処理が実行される。
本来は判定の処理はModelに書くべきだと思われるけど、スペースの都合上コントローラに書いた。
ブログにコード書くのってむずいですね……。