转换mysql查询到蛋糕php查找

时间:2013-04-26 06:12:28

标签: cakephp

我有一个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中发现这不起作用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

不要在查询中包含纯文本密码!

你应该从不这样做;您在查询中包含纯文本密码,并将“salt”值包含为可读字符串。

SQL查询可能已记录(并已备份),因此这些日志文件可以包含所有可读格式的信息!

您应该使用 PHP '哈希'密码并使用哈希密码来查询您的数据库

通过AuthComponent

哈希密码

首先,如果您使用的是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)
));

希望有所帮助。