如何使用zend framework 1.9.0在doctrine 1.1.4中验证加密密码?

时间:2014-07-06 04:41:06

标签: zend-framework doctrine

当我删除 PASSWORD(?)并放置而不是它的作品时!

$q = Doctrine_Query::create()
      ->from('Admanusp_Model_User u')
      ->where('u.Username = ? AND u.Password = PASSWORD(?)',
                array($this->username, $this->password)
        );

谢谢!

1 个答案:

答案 0 :(得分:0)

在您的应用程序中获取密码之前,您需要首先在数据库中哈希密码。

在数据库中存储密码的方法有很多种。你可能应该在生产环境中使用哈希哈希 - 然而 - 简单地说,我想你只使用MD5()。

正如您在评论中所写,您的用户表包含纯文本密码。让我们将它们转换为MD5哈希,调用以下查询:

UPDATE user SET Password = MD5(Password)

现在,您可以使用此Doctrine查询检查给定的用户数据是否正确:

$q = Doctrine_Query::create()
    ->from('Admanusp_Model_User u')
    ->where('u.Username = ? AND u.Password = ?',
            array($this->username, md5($this->password))
    );

我建议您不要在查询中输入纯文本密码,例如:

->where('u.Username = ? AND u.Password = MD5(?), array($this->username, $this->password));

因为这些密码可以保存在DBMS或探查器日志中。

根据manual,你不应该使用MySQL PASSWORD()函数:

  

PASSWORD()函数由MySQL中的身份验证系统使用   服务器;你不应该在自己的应用程序中使用它。为了那个原因   目的,改为考虑MD5()或SHA1()。

希望这些信息能引导你朝着正确的方向前进。