2012-04-08 46 views
0

所以,我环顾四周,并检查了SO。我的问题类似于这个:Why is the CakePHP authentication component not hashing my password?,除了我不能得到它的工作。为什么不是我的密码哈希?

我的密码在注册时取消了。

在我的用户控制器:

public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('register', 'logout'); 
    $this->Auth->fields = array('username' => 'email', 'password' => 'password'); 
} 

查看:

<?php echo $this->Form->create('User'); ?> 
    <fieldset> 

     <?php 
     echo $this->Form->input('email'); 
     echo $this->Form->input('password'); 
     ?> 
    </fieldset> 
<?php echo $this->Form->end(__('Submit'));?> 

而且我对email领域的一些验证。问题是,密码以明文形式存储。我以为 Auth->fields行应该照顾到这一点,但事实并非如此。我知道CakePHP只有散列,如果usernamepassword$data都填充,但我清楚地重新映射它,所以它应该散列正确?

回答

0

如果您正在使用CakePHP的2.x中,验证不会在http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

AuthComponent哈希密码自动再

从文档不再自动哈希每个密码可以 找到。这被删除,因为它使诸如 验证的一些常见任务变得困难。您不应该存储纯文本密码,并且在保存用户记录之前应始终对密码进行哈希处理。您可以使用静态AuthComponent :: password()在 之前对密码进行哈希密码保存。这将为您的 应用程序使用配置的散列策略。

+0

噢GOSH。难怪!这是否意味着Auth->字段现在是无用的? – Strawberry 2012-04-08 03:38:43

+0

当你的用户登录时,Auth组件仍然在使用它来验证密码,你只需要手动对其进行哈希:) – 2012-04-08 03:53:27

+0

我推荐使用一种行为来保持代码DRY:http://www.dereuromark.de/2011/ 8月25日/工作与-密码功能于CakePHP的/ – mark 2012-04-08 09:54:31