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