我有一个mysql查询如下:
select * from users where email='xxx@xxx.com' and password = SHA1(CONCAT(SHA1(SHA1("123456")),salt))
我想转换为蛋糕PHP查找使用beforSave函数:
public function beforeFind(array $queryData) {
if(isset($queryData['conditions']['User.password'])) {
$queryData['conditions']['User.password'] = 'SHA1(CONCAT(SHA1(SHA1("'.$queryData['conditions']['User.password'].'")),User.salt))';
}
$this->log($queryData);
return $queryData;
}
mysql查询运行正常,但在cakephp中发现这不起作用。
感谢您的帮助。
答案 0 :(得分:5)
你应该从不这样做;您在查询中包含纯文本密码,并将“salt”值包含为可读字符串。
SQL查询可能已记录(并已备份),因此这些日志文件可以包含所有可读格式的信息!
您应该使用 PHP '哈希'密码并使用哈希密码来查询您的数据库
首先,如果您使用的是AuthComponent,CakePHP将自动执行所有这些操作;它会查找/识别用户,并且(如果正确)允许您登录该用户。
请参阅:Authentication
要手动加密密码,请使用AuthComponent::Password()
或Security::hash()
我现在赶时间,但如果您需要更多信息或示例,请发表评论,然后我会添加该信息
答案 1 :(得分:0)
如果我已正确理解您的问题,那么您希望搜索具有给定用户名和密码的用户。您不需要为此使用beforeSave。如果你想对密码进行编码,那么你可以使用beforeFind或IMO,只需在执行查询之前就可以在一行中完成。
您可以通过查询方法使用Cakephp查找。像$this->Users->query("your mysql query");
这样的东西,或者如果你想使用普通的查找,那也可以。
$user = $this->Users->find('first', array(
'conditions' => array('Users.email' => $email, 'Users.password' => $password)
));
希望有所帮助。