setCredentialTreatment如何在Zend框架中工作

时间:2012-05-22 11:21:30

标签: php zend-framework

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

  

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

2 个答案:

答案 0 :(得分:4)

setCredentialTreatment告诉auth适配器如何检查用户提供的密码与数据库中的密码(或者再次检查的密码)。在您的示例中,?是表示密码的占位符,CONCAT()SHA1()都是数据库函数。因此,此示例将salt附加到用户输入的密码,然后使用SHA1散列它们。

这将导致数据库查询看起来类似于:

  

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

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

setCredentialTreatment('MD5(?)');

答案 1 :(得分: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);