0

在过去的 2 个小时里,我一直在为此头疼。基本上,我的用户表不称为Users而是Members。我已将此代码添加到我的 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'
            )
        )
    )
);

谢谢 :)

4

2 回答 2

1

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

于 2013-01-29T12:56:22.843 回答
0

我认为你过于偏执了,法比安。您想关闭密码散列,以便检查用户登录系统是否正常工作,对吗?好吧,使用散列或未散列的密码登录没有区别。

假设我的密码是Test123. 如果散列被关闭,我能够登录的唯一方法是如果我输入Test123并且它在数据库中完全相同。如果散列是打开的,我的 SHA1 散列密码是8308651804facb7b9af8ffc53a33a22d6a1c8ac2,所以我可以登录的唯一方法是如果我输入与数据库匹配的密码的确切未散列表示。

在这两种情况下,只有一个确切的字符串可以让我登录。因此,如果它没有登录,那么您没有输入数据库中的正确密码,无论是散列还是未散列。

因此,这使我假设您正在尝试通过手动使用密码(例如Test123)预先填充数据库来进行测试,然后您尝试使用密码登录。当然,你不知道密码的散列版本,所以你把密码Test123输入数据库,然后当你尝试登录时,Cake 正在尝试使用散列版本8308651804facb7b9af8ffc53a33a22d6a1c8ac2并且登录不起作用。

您需要做的就是使用在线 SHA-1 生成器生成密码。所以输入Test123,得到它给你的散列版本,然后把它放在你的数据库中。然后当你输入 登录时Test123,Cake 会对它进行哈希处理,并将其与数据库中的哈希版本匹配,然后你就可以登录了。

如果它没有登录,你要么输入了错误的密码,要么在数据库中存储了错误的哈希值。此外,请确保您的数据库密码字段是存储整个哈希的正确类型。CHAR(40) 是 SHA-1 密码的不错选择。

于 2013-01-29T16:30:22.147 回答