Cakephp Auth hashPasswords重写问题

时间:2011-06-29 00:52:16

标签: php cakephp authentication

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

它现在可以完美地添加用户,但在登录时,用户名/密码字段将被拒绝。似乎登录功能正在寻找与我的新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() {

}   

1 个答案:

答案 0 :(得分:0)

我没有看过视频,但是 -

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

就密码匹配而言 - 在客户端进行密码匹配实际上要容易得多(在那里验证表单的许多Jquery函数)。你甚至可以写一个简单的东西:

if($this->data['User']['password'] != $this->data['User']['password_conf']{
    $this->Session->setFlash('Passwords do not match');
} else {
    //save user etc
}

如果你想在模型中进行验证,那么一定要编写一个自定义验证规则 - 但是密码将再次为你进行哈希处理 - 你只需要比较非散列版本并查看它们是否匹配,如果他们这样做则返回true

此外 - 每个人都有完全不同的方式对用户进行身份验证 - 首先是阅读文档 - 对于一个简单的Authenticated / ACL应用程序有一个excellent tutorial,需要大约30分钟才能完成,并且应该是任何人的起点。