如何在CakePHP 2.2中关闭密码的AuthComponent自动哈希?

如何在CakePHP 2.2中关闭密码的AuthComponent自动哈希?,cakephp,Cakephp,我花了两个小时来为这件事伤脑筋。基本上,我的用户表不是称为用户,而是称为成员。我已将此代码添加到我的AppController.php中,但在运行查询之前,密码总是会被散列 我做错了什么 public $components = array( 'Auth' => array( 'loginAction' => array( 'controller' => 'members', 'action' =>

我花了两个小时来为这件事伤脑筋。基本上,我的用户表不是称为用户,而是称为成员。我已将此代码添加到我的AppController.php中,但在运行查询之前,密码总是会被散列

我做错了什么

public $components = array(
    'Auth' => array(
        'loginAction' => array(
            'controller' => 'members',
            'action' => 'login'
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'username', 'password' => 'password'),
                'userModel' => 'Member'
            )
        )
    )
);

谢谢:)

在Cake 2.x中,默认情况下自动哈希密码是关闭的

我认为你太偏执了,费边。您想关闭密码哈希,以便检查用户登录系统是否正常工作,对吗?好吧,用散列密码登录和不使用散列密码登录没有区别

假设我的密码是
Test123
。如果禁用了哈希,我登录的唯一方法就是输入
Test123
,并且在数据库中完全相同。如果启用哈希,我的SHA1哈希密码是
8308651804facb7b9af8ffc53a33a22d6a1c8ac2
,因此,我可以登录的唯一方法是输入密码的精确非哈希表示形式,该表示形式与数据库中的密码匹配

在这两种情况下,只有一个确切的字符串允许我登录。因此,如果它没有登录,则表示您没有在数据库中输入正确的密码(已哈希或未哈希)

因此,我假设您正在尝试通过手动预填充数据库密码(例如,
Test123
)进行测试,然后尝试使用密码登录。当然,您不知道密码的哈希版本,所以您将
Test123
放入数据库,然后当您尝试登录时,Cake尝试使用
8308651804FACB7B9AF8FFC53A31A2D6A1C8AC2
的哈希版本,登录不起作用

您所需要做的就是使用。因此,输入
Test123
,获取它提供给您的哈希版本,并将其放入数据库中。然后,当您通过输入
Test123
登录时,Cake将对其进行散列,并将其与数据库中的散列版本相匹配,您将登录


如果它没有登录,则可能输入了错误的密码,或者在数据库中存储了错误的哈希。另外,确保数据库密码字段的类型正确,可以存储整个散列。CHAR(40)是SHA-1密码的好选择。

你是什么意思?登录时,需要在查找之前对密码进行哈希运算。否则,您无法将其与存储的密码进行比较。我现在以纯文本形式存储密码,只是为了看看系统如何工作。在我开始对密码进行哈希运算之前,我希望AuthComponent仅以纯文本形式查找密码。坏主意:)从一开始就正确地查找密码,一切都会按照文档记录的方式工作(正如教程所说的那样)。我同意你所说的不进行哈希运算是个坏主意(我总是对密码进行哈希运算),但不应该像预期的那样工作(无散列)与其试图强制执行自己的规则,不如不强制您执行任何操作。编写您自己的身份验证适配器,它不使用任何哈希。好了。我只是说您在没有问题的地方制造了问题。我正在开箱即用,但它仍然在哈希密码。请在保存
成员的
之前签入您的
model或
AppModel
。Cake 2.x没有。这两者中都没有定义
beforeSave
。login()将自动哈希。这是他的问题;)他不想进行任何哈希,这是最糟糕的想法。请看我上面的评论:从一开始就“正确地”做是这里的解决方案。