我花了最后两个小时才打破了这个。基本上,我的用户表不是用户,而是成员。我已将此代码添加到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'
)
)
)
);
谢谢:)
答案 0 :(得分:1)
在Cake 2.x中,自动哈希密码默认关闭
答案 1 :(得分:0)
我认为你过于偏执,费边。您想关闭密码哈希,以便检查用户登录系统是否正常工作,对吗?嗯,使用散列或未散列密码登录时没有区别。
假设我的密码为Test123
。如果关闭哈希,我能够登录的唯一方法是输入Test123
并且它在数据库中完全相同。如果启用了散列,则我的SHA1散列密码为8308651804facb7b9af8ffc53a33a22d6a1c8ac2
,因此我可以再次登录的唯一方法是输入密码的确切未散列表示,该表示在数据库中匹配。
在这两种情况下,只有一个确切的字符串允许我登录。因此,如果它没有登录,则表示您没有输入数据库中的正确密码,哈希值或未哈希值。
因此,这使我假设您尝试通过手动填充数据库(例如Test123
)进行测试,然后尝试登录。当然,您不知道密码的散列版本,因此您将Test123
放在数据库中,然后当您尝试登录时,Cake正在尝试使用散列版本的8308651804facb7b9af8ffc53a33a22d6a1c8ac2
和登录不起作用。
您需要做的就是使用online SHA-1 generator生成密码。因此,输入Test123
,获取它为您提供的散列版本,并将其放入您的数据库中。然后当您通过输入Test123
登录时,Cake将对其进行哈希并将其与数据库中的哈希版本匹配,然后您将登录。
如果它没有登录,您输入了错误的密码,或者将错误的哈希存储在数据库中。此外,请确保您的数据库密码字段是存储整个哈希的正确类型。 CHAR(40)是SHA-1密码的不错选择。