登录Cakephp不';无法使用哈希密码

登录Cakephp不';无法使用哈希密码,cakephp,authentication,cakephp-1.2,Cakephp,Authentication,Cakephp 1.2,我在登录时犯了一个奇怪的错误。字段“passwd”像往常一样是散列的,因此例如,数据库中的密码“12345”是“844B1054B7C94519B6565DD301B3DED4A07B2C1” 显然一切都是正确的 …但当我尝试登录时,我可以使用“844B1054B7C94519B6565DD301B3DED4A07B2C1”进行登录,但不能使用“12345”,我不知道为什么。应该是相反的 $default_settings = array( 'Auth.enabled' => tr

我在登录时犯了一个奇怪的错误。字段“passwd”像往常一样是散列的,因此例如,数据库中的密码“12345”是“844B1054B7C94519B6565DD301B3DED4A07B2C1”

显然一切都是正确的

…但当我尝试登录时,我可以使用“844B1054B7C94519B6565DD301B3DED4A07B2C1”进行登录,但不能使用“12345”,我不知道为什么。应该是相反的

$default_settings = array(
    'Auth.enabled' => true,
    'Auth.authorize' => 'controller', //actions
    'Auth.actionPath' => $prefix.'/',
    'Auth.userModel' => 'Taller',
    'Auth.authenticate' => ClassRegistry::init('Taller'),
    'Auth.fields' => array('username' => 'usuario', 'password' => 'passwd'),
    'Auth.authError' => false,
    'Auth.loginAction' => array('plugin' => 'pro', 'controller' => 'users', 'action' => 'login'),                                       'Auth.loginRedirect' => '/webpro',                                  'Auth.logoutRedirect' => '/webpro',         
    'Acl.enabled' => true,
);
我使用的是CakePHP1.2


提前感谢。

CakePHP可能不理解在比较之前需要对密码字段进行哈希运算,因为您已经重命名了字段。。。您可以在该字段中输入哈希密码并成功登录,这一事实证实了这一点

 'Auth.fields' => array('username' => 'usuario', 'password' => 'passwd'),
尝试将数据库列重命名为密码,并确保在视图中使用FormHelpers来排除这一问题。。我很抱歉回答不好,但这是我能从你的帖子中得到的最好的答案。如果你回复我的答案,我很乐意改进

否则,请在比较之前找到一种散列密码的方法,但新的>2.0肯定会这样做。我不知道如何在CakePHP 1.2中做到这一点,但我强烈建议您升级以享受2.0中的所有新功能,同时尝试遵守CakePHP惯例,您定制的越多,诊断问题就越困难

更新 尝试将以下内容添加到用户模型中: app/Model/User.php

    function hashPasswords($data) {
        return Security::hash($data,'md5',false);
    }
function login() {
    if(!empty($this->data)) {
        $this->data['User']['password'] = Security::hash($this->data['User']['password'],'md5',false);
        $this->Auth->login($this->data);
        $this->redirect("home");
    }
}
Ref:

如果上述操作不起作用: 基于替代控制器的方法

app/Controller/userscocontroller.php

    function hashPasswords($data) {
        return Security::hash($data,'md5',false);
    }
function login() {
    if(!empty($this->data)) {
        $this->data['User']['password'] = Security::hash($this->data['User']['password'],'md5',false);
        $this->Auth->login($this->data);
        $this->redirect("home");
    }
}
Ref:

它是否给出任何错误?不,只是“密码错误”。我猜是配置中的一些东西,但我不知道是什么。顺便说一句,您使用的是非常古老的cakeIt版本,在验证之前应该取消对密码的刷新,但它不会。“它应该在验证之前取消对密码的刷新,但它不会。”。。。不,这不是它的工作原理。您不需要解锁密码。非常感谢您的回答。我已尝试更改列的名称,但问题仍然存在。我知道更新蛋糕的vesrion应该可以解决很多问题,但现在我做不到。所以,我会继续发问,问题解决后我会通知你。谢谢,我已经更新了我的答案,告诉我们如何散列,实际上有很多方法可以实现上述目的,因此,您可以找到一种更优雅的方法,但我相信,根据您告诉我们的,我的控制器方法会起作用。