2015-07-19 143 views
0

我正在瀏覽CakePHP教程並試圖測試基本的登錄功能。我一直在做一些微調,以便匹配我的數據庫需要查看的內容(電子郵件和令牌,而不是用戶名和密碼,作爲用戶表中的列),我相信在使用Blowfish散列時我已經搞砸了。有人可以看一看,看看有沒有什麼明顯的東西出現?現在我可以添加新用戶,但是他們在數據庫中的密碼看起來像是純文本。令牌列的類型是VARCHAR(75),是否有足夠的空間讓Blowfish工作?CakePHP驗證:無效的鹽/無效的用戶名或密碼?

,我發現了錯誤:

**警告(512):無效的鹽:通過對河豚**

,然後「無效的用戶名或密碼,」在正確的用戶時,把/通過組合。當我輸入不正確的憑證時,我只會得到無效的用戶/通行證錯誤,所以看起來它仍然在通過某處。

應用/型號/ user.php的

App::uses('AppModel', 'Model'); 
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); 

class User extends AppModel { 

    public $validate = array(
     'email' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'An email is required' 
      ) 
     ), 
     'token' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'A password is required' 
      ) 
     ), 
     'group' => array(
      'valid' => array(
       'rule' => array('inList', array('user', 'admin', 'manager')), 
       'message' => 'Please enter a valid group role', 
       'allowEmpty' => false 
      ) 
     ) 
    ); 

    public function beforeSave($options = array()) { 
    if (isset($this->data[$this->alias]['token'])) { 
     $passwordHasher = new BlowfishPasswordHasher(); 
     $this->data[$this->alias]['token'] = $passwordHasher->hash(
      $this->data[$this->alias]['token'] 
     ); 
    } 
    return true; 
     } 
} 

應用/控制器/ AppController.php

class AppController extends Controller { 
    //... 

    public $components = array(
     'Session', 
     'Auth' => array(
      'loginRedirect' => array(
       'controller' => 'posts', 
       'action' => 'index' 
      ), 
      'logoutRedirect' => array(
       'controller' => 'pages', 
       'action' => 'display', 
       'home' 
      ), 
      'authenticate' => array(
       'Form' => array(
        'passwordHasher' => 'Blowfish', 
        'fields' => array('username' => 'email', 'password' => 'token') 

       ) 
      ) 
     ) 
    ); 

    public function beforeFilter() { 
     $this->Auth->allow('index', 'view'); 

    } 
    //... 
} 

add.ctp

<div class="users form"> 
<?php echo $this->Form->create('User'); ?> 
    <fieldset> 
     <legend><?php echo __('Add User'); ?></legend> 
     <?php echo $this->Form->input('email'); 
     echo $this->Form->input('token'); 
     echo $this->Form->input('group', array(
      'options' => array('admin' => 'Admin', 'manager' => 'Manager', 'user' => 'User') 
     )); 
    ?> 
    </fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 
</div> 

login.ctp

<div class="users form"> 
<?php echo $this->Session->flash('auth'); ?> 
<?php echo $this->Form->create('User'); ?> 
    <fieldset> 
     <legend> 
      <?php echo __('Please enter your username and password'); ?> 
     </legend> 
     <?php echo $this->Form->input('email'); 
     echo $this->Form->input('token'); 
    ?> 
    </fieldset> 
<?php echo $this->Form->end(__('Login')); ?> 
</div> 

回答

1

檢查河豚鹽,以確保它具有正確的字符數,並使用添加/編輯表單initally設置密碼。

您還應該將db中的令牌長度設置爲256個字符