1

谁能告诉我以下语句的用途以及它在 Zend Framework 中的工作原理?

setCredentialTreatment('SHA1(CONCAT(?, salt))');

4

2 回答 2

4

setCredentialTreatment告诉身份验证适配器如何检查用户提供的密码与数据库中的密码(或再次检查的任何密码)。在您的示例中, the?是表示密码的占位符,并且CONCAT()SHA1()都是数据库函数。所以这个例子会将盐附加到用户输入的密码中,然后使用 SHA1 对它们进行哈希处理。

这将产生一个类似于以下内容的数据库查询:

SELECT id FROM users WHERE email = 'user@example.com' AND password = SHA1(CONCAT('password',salt))

您用于setCredentialTreatment()更改密码的检查方式。例如,如果您的密码只是直接的 MD5 哈希,则您可以改用:

setCredentialTreatment('MD5(?)');
于 2012-05-22T11:49:18.110 回答
2

试试这样:

            $auth = Zend_Auth::getInstance();
            $authAdapter = new Zend_Auth_Adapter_DbTable(
                Zend_Db_Table::getDefaultAdapter(),
                'users',
                'username',
                'password',
                "CONCAT('$this->_salt', sha(?))"
            );
            $authAdapter->setIdentity($username)
                ->setCredential($password);
于 2012-05-26T12:13:31.650 回答