パスワードのハッシュ化

ハッシュ化されるパスワードとユーザー登録

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

CakePHP Note (v1.3)

Index