2013-08-05 234 views
0

我想爲我的cakephp應用程序設置bcrypt。我之前在另一個應用上設置了它,並且工作正常。但是,在將加密代碼從一個應用程序複製/粘貼到另一個應用程序之後,它將密碼保存爲空白。Cakephp bcrypt保存空字段

數據庫設置正確,密碼字段爲varchar(225)。

我得出的結論是,下面的代碼行是導致問題的原因;

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

如果我要取出這個beforeSave函數,我的密碼將正確保存爲明文。如果我是來取代

$this->data['User']['password'] = $hash; 

$this->data['User']['password'] = 'testpassword'; 

這將正確保存密碼testpassword。

我的AppController:

public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' =>'Blowfish', 
     'logoutRedirect' => array('controller'=>'fronts', 'action'=>'index'), 
     'authorize' => array('Controller') 
    ) 
); 

我的表格:

<?php echo $this->Session->flash('auth'); ?> 
<?php echo $this->Form->create('User'); ?> 
<fieldset> 
    <?php 
     echo $this->form->input('username', array('placeholder' => 'Username', 'label' => false)); 
     echo $this->form->input('password', array('placeholder' => 'Password', 'label' => false)); 
     echo $this->form->submit('CREATE', array('class' => 'button')); 
    ?> 
</fieldset> 
<?php echo $this->Form->end(); ?> 

當嘗試登錄,但我知道它不會工作,我得到這個錯誤

Authentication adapter Blowfish was not found. 
+0

您可以發佈或查看您設置的表單嗎?也許一個字段的名稱是錯誤的 – Sixthpoint

+0

好主意,只是編輯OP – user2444539

回答

1

的之前保險似乎是正確的。我基本上使用相同的東西。這是我的代碼。

我還設置河豚我beforefilter,曾與其他方式

$this->Auth->authorize = array('Controller'); 
$this->Auth->authenticate = array(
    'Blowfish' => array( 
     'userModel' => 'Account', 
     'fields' => array('username' => 'act_username', 'password' => 'act_password') 
    ) 
); 

問題的另一個區別是我的表單按鈕有這對於提交

echo $this->Form->submit('Login', array('id' => 'submit', 'type' => 'submit')); 

注意:此爲2.4 blowfish加密正在改變,僅在2.3版本中加密:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-bcrypt-for-passwords

+0

感謝您的答案,但它並沒有真正做太多。仍然返回數據庫中的空白密碼 – user2444539

+0

您使用的是哪個版本? – Sixthpoint

+0

2.2.9 ...我剛剛意識到bcrypt直到2.3才執行正確嗎? dammmn woops。我剛剛下載了頂部的版本,假設它是最新的版本。是否有可能更新我的版本,而不會失去我的進度?編輯:修復所有這一切。感謝您指出了這一點 :) – user2444539