2015-07-19 145 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个字符