Cakephp身份验证哈希密码重写问题

Cakephp身份验证哈希密码重写问题,php,cakephp,authentication,Php,Cakephp,Authentication,我一直在使用它重写我的登录/注销功能,以处理模型中的身份验证和匹配密码 它现在完美地添加了用户,但登录时用户名/密码字段被拒绝。似乎登录函数正在寻找一个不同于我的新hashPasswords函数所存储的散列密码。对可能出现的问题有什么建议吗 这是一个相当标准的设置。谢谢你的帮助 代码的相关部分: 用户模型: var $validate = array( 'password' => array( 'The Password must be filled' =>a

我一直在使用它重写我的登录/注销功能,以处理模型中的身份验证和匹配密码

它现在完美地添加了用户,但登录时用户名/密码字段被拒绝。似乎登录函数正在寻找一个不同于我的新hashPasswords函数所存储的散列密码。对可能出现的问题有什么建议吗

这是一个相当标准的设置。谢谢你的帮助

代码的相关部分:

用户模型:

var $validate = array(
    'password' => array(
        'The Password must be filled' =>array(            
            'rule' => 'notEmpty',
            'message' => 'Please supply a valid password.'
        ),
        'The Password must be between 5 and 15 characters' => array(
            'rule' => array('between', 5, 15),
            'message' => 'The password must be between 5 and 15 characters.'
        ),
        'The passwords do not match' => array(
            'rule' => 'matchPasswords',
            'message' => 'The passwords do not match.'
        )       
    ),

function hashPasswords($data) {
    if (isset($this->data['User']['password'])) {
        $this->data['User']['password'] = Security::hash($this->data['User']['password'], NULL, TRUE);
        return $data;
    }
    return $data;
}

function beforeSave() {
    $this->hashPasswords(NULL, TRUE);
    return TRUE;
}
用户控制器:

function beforeFilter() {
    parent::beforeFilter();
    if ($this->action == 'add' || $this->action == 'edit' ) {
        $this->Auth->authenticate = $this->User;
    }
}


function add() {
    if (!empty($this->data)) {

        if ($this->User->save($this->data)) {
                $this->Session->setFlash('Your Account Has Been Created.');
                $this->redirect(array('action' => 'homepage'));
        }
    }
}

function login() {

}   

我没看过录像,但是-

当$this->data['User']有一个“username”和“password”数组,并用于保存用户时,蛋糕实际上会对密码进行哈希运算。可能发生的情况是您的哈希密码再次被哈希-请查看上的cake文档

就密码匹配而言,在客户端进行密码匹配实际上要容易得多,因为客户端没有散列大量验证表单的Jquery函数。您甚至可以编写一个简单的:

if($this->data['User']['password'] != $this->data['User']['password_conf']{
    $this->Session->setFlash('Passwords do not match');
} else {
    //save user etc
}
如果您希望在模型中进行验证,那么一定要编写一个自定义的验证规则-但是密码将再次为您进行散列-您只需要比较未散列的版本,看看它们是否匹配,如果匹配,则返回true


此外-每个人都有完全不同的用户身份验证方法-首先,请阅读文档-对于一个简单的经过身份验证的/ACL应用程序来说,有一个简单的解决方案,需要大约30分钟才能完成,应该是任何人的起点。

AuthComponent正在为您处理密码哈希。为什么要手动对其进行散列?浏览完那段视频后:也许你还得看本系列的下一段视频,但这本身似乎有点毫无意义……:-/这是从整个视频。我相信密码散列是单独完成的,因为他们正在延迟它并将其保存在beforeSave中。这样我们就可以匹配模型中的密码,避免在控制器中进行验证。