| 21件目(121件中) |

Authコンポーネント使用時にパスワードをハッシュ化させない

固定リンク:#0000000103   投稿者:ZiSTA 日時:2010-02-17 17:21:20   コメント( 0

若干トリッキーかも知れませんが、手っ取り早くパスワードをハッシュ化させないようにする方法です。その方法はAuthComponentのfields属性でパスワード・フィールドの名前を変更してしまう事です。AuthComponentはユーザー名とパスワードのフィールドが揃っているとパスワードの入力をハッシュ化します。


以下のコードではフォームに'password'という名前のフィールドがあっても暗号化されません。モデルでの検証を行う事が出来ます。さらに'password_confirm'というフィールドがあれば暗号化されますので、これを利用してモデル内でパスワードの入力確認を行います。

class UsersController extends AppController {
	function beforeFilter(){
		parent::beforeFilter();
		if($this->action=="add"){
                    $this->Auth->fields['password'] ='password_confirm';
                }	
	}
}


パスワードの入力確認はモデルにdoubleCheckメソッドを作って'password'フィールドのルールに設定します。

class User extends AppModel {
	var $name = 'User';
	
	var $validate = array(
            'username' =>array(
                'between'=>array(
                    'rule' => '/^[A-Za-z0-9_]{4,20}$/u',
					'required'=>true,
					'message' => '英数で4〜20文字以内で入力ください。',
					'last'=>true
					),
				'uniq'=>array(
                    'rule' =>array( 'isUnique'),
                    'message' => '既に登録されています'),)
            	,
            'password' =>array(
                'between'=>array(
                    'rule' => '/^[A-Za-z0-9]{6,10}$/u',
					'required'=>true,
					'message' => '英数で6〜10文字以内で入力ください。',
					'last'=>true),
                'doublecheck'=>array(
                    'rule'=>'doubleCheck',
                    'required'=>true,
                    'message' => 'パスワードとパスワードの確認が一致しませんでした。')
					)
            	,
            'password_confirm' =>array(
				'rule'=>'notEmpty',
                'message'=>'')
            );
            
            
    function doubleCheck($data){
        //password_confirmはAuthComponentがハッシュ化
        //passwordをハッシュ化して同一性チェック。ハッシュ化はAuthComponentと同じコードを使う事。
        if($this->data['User']['password_confirm']==Security::hash($this->data['User']['password'], null, true)){
            //ついでにハッシュ化されている'password_confirm'の値を'password'にセット
            $this->data['User']['password']=$this->data['User']['password_confirm'];
            return true;
        }
        return false;
    }   
}


AuthComponentが自身のloginActionに設定されたアクションの場合だけhashPasswordかけてくれれば良いかなと思うけど、、、。

 

コメント

| 21件目(121件中) |
↑ ページトップ