2009-03-06 6 views
1

私はCakePHP 1.2をAuthとACLコンポーネントに使用しています。CakePHP認証コンポーネントがパスワードをハッシュしないのはなぜですか?

私のユーザー登録操作では、パスワードがハッシュで表示されています。具体的には、この式:

if ($this->data['User']['password'] != 
    $this->Auth->password($this->data['User']['confirm_password'])) 

これは私がpasswordconfirm_passwordに対して同一の値を提出した場合でも、trueと評価しています。 Auth->passwordへの呼び出しを削除すると、式はfalseと評価されるため、パスワードはハッシュされていないことがわかります。

Authモジュールが自動的にパスワードをハッシュすると予想しました。私は間違って何をしていますか?ここで

は、私の見解である。ここでは

<?php 
    echo $form->create('User', array('action' => 'register')); 

    echo $form->input('email', 
         array('after' => $form->error(
         'email_unique', 'This email is already registered.'))); 
    echo $form->input('password'); 
    echo $form->input('confirm_password', array('type' => 'password')); 
    echo $form->end('Register'); 
?> 

は、ユーザコントローラからの私のレジスタアクションです:

function register(){ 
    if ($this->data) { 
     if ($this->data['User']['password'] != 
      $this->Auth->password($this->data['User']['confirm_password'])) { 

      $this->Session->setFlash(__('Password and Confirm Password must match.', true)); 
      $this->data['User']['password'] = ''; 
      $this->data['User']['confirm_password'] = ''; 
     } 
     else{ 
      $this->User->create(); 
      if ($this->User->save($this->data)){ 
       $this->redirect(array('action' => 'index'), null, true); 
      } 
      else { 
       $this->data['User']['password'] = ''; 
       $this->data['User']['confirm_password'] = ''; 
       $this->Session->setFlash(__('Some problem saving your information.', true)); 
      } 
     } 
    } 
} 

そして、ここでは、私がAuthAclモジュールを含む私のappControllerです

class AppController extends Controller { 
    var $components = array('Acl', 'Auth'); 

    function beforeFilter(){ 
     if (isset($this->Auth)) { 
      $this->Auth->allow('display'); 
      $this->Auth->fields = 
       array(
       'username' => 'email', 
       'password' => 'password'); 
      $this->Auth->authorize = 'actions'; 
     } 
    } 
} 

私は間違っていますか?私はあなたが

hashPasswords ($data) 

を探していると思う

答えて

2

ユーザ名に提出された値が含まれていない限り、CakePHPはパスワードをハッシュしません。私はusernameフィールドをemailで置き換えています。しかし、Auth-> fields配列を設定して、これらのフィールドを再マッピングしました。しかし、私はappControllerの代わりにuserControllerを使っていました。この行を移動する:

$this->Auth->fields = array('username' => 'email', 'password' => 'password'); 

out of appController to userController解決済み:
質問は「なぜ私はappControllerのAuth->フィールドをリセットできませんか?「

0

は、これらのページを見てください。彼らはあなたを正しい方向に向けるべきです。また、コア設定ファイルでデバッグレベルを変更することもできます。 0(プロダクション)から3に変更すると、SQLの出力が表示されます。役に立つかもしれません。

AuthComponent-Methods

Cakephp troubleshooting

私は何もするが、正しい方向にあなたを指すことはできません申し訳ありません。私はcakephpを初めて使う人です。

1

データベースに保存する前にパスワードをハッシュする必要があります。中(

if(in_array($this->action, array('register'))) { 
    $this->Auth->fields = array('username' => 'email', 'password' => 'wrongfield'); 
} 

パスワードは、登録プロセス中にハッシュ化されないことを意味します。あなたのUserモデルには、この機能を配置します。

function beforeSave() { 
    if(isset($this->data[$this->alias]['password'])) 
    $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], null, true); 
    return true; 
} 

とユーザーコントローラへbeforeFilter()でこれを置くことを忘れないでください登録票の検証に失敗した場合)。

+0

。関数の先頭にparent::beforeFilter()を置くが、私は一つのことに困惑している、』それを修正 - 登録時にパスワードをハッシュしないように指定した場合、パスワードはどのように働くのですか?またはいつハッシュしますか? – Dave

2

あなたはおそらくあなたのUsersController::beforeFilter()AppController::beforeFilter()をオーバーライドしている。

するには、 『ただこれは素晴らしいですね

関連する問題