パスワードのハッシュ化
ハッシュ化されるパスワードとユーザー登録
ユーザー登録の際にはモデルで入力されたパスワードを検証しようとする事は当然あると思います。しかしコントローラやモデルでデータにアクセスした時点で、パスワードはすでにハッシュ化されたパスワードになっています。したがって単純に'password'と'password_confirm'の入力の同一性を確認したり、'password'フィールドに検証ルールを設定して文字数チェックを行うなどの検証ができません。
これはAuthComponentがアクションを実行する前にフォームから送られたデータにユーザー名とパスワードに相当するフィールド($fieldsプロパティで設定可能)が揃っているとパスワードをハッシュ化するようになっているからです。
ユーザー登録を行うアクションを実行する際には一時的にAuthComponentがパスワードをハッシュ化しないようにする必要があります。以下のような方法が考えられます。
コントトローラーのbeforeFilterメソッド内で
- AuthComponentのauthenticateプロパティにパスワードをハッシュ化しないhashPasswordsメソッドを含むオブジェクトを指定する
- AuthComponentのfieldsプロパティでパスワードのフィールド名を実在しない名前にする
class UsersController extends AppController {
        var $components = array('Auth');
	function beforeFilter(){
		parent::beforeFilter();
                $this->Auth->allow('add');
		if($this->action=="add" ){
                      //$this->Auth->authenticateを設定するか
                      //$this->Auth->fieldsを設定する
                }
	}
}
もしくは
- フォームで使うフィールド名を'password_input','password_confirm'などの別名で扱う
最終的にはAuthComponentのpasswordメソッドでハッシュ化してデータを保存する必要があります。