繁体   English   中英

Cakephp Auth hashPasswords rewrite 问题

[英]Cakephp Auth hashPasswords rewrite Problems

我一直在使用本教程重写我的登录/注销功能,以处理 model 中的身份验证和匹配密码。

它现在完美地添加了用户,但登录时用户名/密码字段被拒绝。 似乎登录 function 正在寻找与我的新 hashPasswords() function 正在存储的哈希密码不同的密码。 关于问题可能是什么的任何建议?

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

相关代码部分:

用户 Model:

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;
}

用户 Controller:

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 实际上对密码进行哈希处理。 可能发生的情况是您的散列密码再次被散列 - 查看hashPassword上的蛋糕文档

就密码匹配而言-实际上,在没有散列的客户端上执行此操作要容易得多(那里有很多 Jquery 函数可以验证表单)。 你甚至可以写一个简单的 go :

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

如果您想在 model 中进行验证,那么当然要编写自定义验证规则 - 但密码将为您再次进行哈希处理 - 您只需比较非哈希版本并查看它们是否匹配,如果匹配则返回 true。

此外 - 每个人都有完全不同的用户身份验证方式 - 首先阅读文档 - 有一个简单的经过身份验证 / ACL 应用程序的优秀教程,它需要大约 30 分钟才能通过 go 并且应该是任何人的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM