-2

我有一个mysql查询如下:

select * from users  where email='xxx@xxx.com' and password = SHA1(CONCAT(SHA1(SHA1("123456")),salt))

我想使用 beforSave 函数转换为蛋糕 PHP 查找:

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

感谢您的帮助。

4

2 回答 2

5

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

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

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

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

通过 AuthComponent 散列密码

首先,如果你使用 AuthComponent,CakePHP 会自动完成所有这些动作;它将查找/识别用户并(如果正确)允许您登录该用户。

请参阅:身份验证

要“手动”加密密码,请使用AuthComponent::Password()Security::hash()

我现在很着急,但是如果您需要更多信息或示例,请发表评论,然后我会添加该信息

于 2013-04-26T06:45:49.893 回答
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)
));

希望有帮助。

于 2013-04-26T06:26:02.573 回答