パスワードのハッシュ化
ハッシュ化されるパスワードとユーザー登録
ユーザー登録の際にはモデルで入力されたパスワードを検証しようとする事は当然あると思います。しかしコントローラやモデルでデータにアクセスした時点で、パスワードはすでにハッシュ化されたパスワードになっています。したがって単純に'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メソッドでハッシュ化してデータを保存する必要があります。