WEBシステムを構築する際に必ず構築するログイン処理、CakePHPでは
Auth Componentと呼ばれる便利なControllerコンポーネントが存在します。
これを使うと、特にコードを書くことなく
ログイン処理、ログアウト処理、ユーザ作成・編集時のパスワードハッシュ化を実現できます。
私は説明が下手なので、要点をうまくまとめているサイトをご紹介します。
http://blog.ne2ma2.com/archives/161
暗号化の部分はModelやControllerの部分に戻ってくる時点で行われているため、
CakePHPのバリデーションを使うことができません。
ユーザの編集時にパスワードが勝手に二重でハッシュ化され、以後ログインできなくなったり、
パスワードを必ず入力してもらうことになります。
上記サイトでは異なるモデルでバリデーションを定義することでこれを解決していますが、
もう1つ単純なやりかたとして、暗号化の部分を手動で行う、があります。
Authコンポーネントのファイルのstartup()という関数の中で必ず呼ばれている
$this->data = $controller->data = $this->hashPasswords($controller->data);
をコメントアウトするだけです。
後は、ハッシュ化が必要なときに適時上記と同じ関数をコントローラーで呼ぶだけです。
例: $this->data = $this->Auth->hashPasswords($this->data); //ユーザの入力したパスワードをハッシュ化
あと、ログイン時に入力されたユーザ名とパスワードをハッシュ化して認証する都合上、
Authコンポーネントのログイン関数にも手動で暗号化処理を加えてあげる必要があります。
if (empty($data)) {
$data = $this->data;
}
else{
$data[$this->userModel.".".$this->fields['password']] = $this->password($data[$this->userModel.".".$this->fields['password']]);
}
人様に用意して頂いたものにケチをつけるのは好きではありませんが、
システムの動きとして自然な気がします。