authentication - zend Framework 2 使用 Db 表进行身份验证失败

标签 authentication zend-framework2 zend-db-table zend-auth

我已关注zend instructions使用数据库表实现我的网络身份验证。

完全相同的代码,但是渲染页面时出现以下异常:

    Zend\Authentication\Adapter\Exception\RuntimeException
    File:
    C:\xampp\htdocs\pfc\vendor\ZF2\library\Zend\Authentication\Adapter\DbTable.php
    Mensaje:
    The supplied parameters to DbTable failed to produce a valid sql statement, please
    check table and column names for validity.

由其他人制作:

    Zend\Db\Adapter\Exception\InvalidQueryException
    File:
    C:\xampp\htdocs\pfc\vendor\ZF2\library\Zend\Db\Adapter\Driver\Mysqli\Statement.php
    Mensaje:
    Statement couldn't be produced with sql: SELECT `users`.*, (CASE WHEN `password` = ?
    THEN 1 ELSE 0 END) AS `zend_auth_credential_match` FROM `users` WHERE `mail` = ?

似乎Statement.php无法执行上面的sql,但我通过phpmyadmin替换?对于字符串并且工作正常。

我确信 $dbAdapter 也可以正常工作,因为我已经测试过它并且列名称是 “邮件”和“密码”。

这在我的代码中,我也放置了 $dbAdapter 测试代码。

    $dbAdapter = new DbAdapter(array(   //This DbAdapter Work ok sure!!
        'driver' => 'Mysqli',
        'database' => 'securedraw',
        'username' => 'root',
        'password' => ''
    ));

    $fp = function($name) use ($dbAdapter) { return $dbAdapter->driver->formatParameterName($name);};
    $sql = 'SELECT * FROM ' . $qi('users') . ' WHERE id = ' . $fp('id');
    $statement = $dbAdapter->query($sql);
    $parameters = array('id' => 1);
    $sqlResult = $statement->execute($parameters);
    $row = $sqlResult->current();
    $mail = $row['mail'];
    $password = $row['password'];  //until here test $dbAdapter exitly!!

    //Start the auth proccess!!
    $authAdapter = new AuthDbTableAdapter($dbAdapter);
    $authAdapter->setTableName('users')
    ->setIdentityColumn('mail')
    ->setCredentialColumn('password');
    $authAdapter->setIdentity('josep')
    ->setCredential('josep');
    $authResult = $authAdapter->authenticate();   //This is the fail method!!!

最佳答案

经过对这个主题的更多研究,我发现如果将 dbAdapter 的驱动程序更改为 pdo_mysql,验证方法可以正常工作。

问题是我不想使用 PDO,因为 SGBD 将来不会改变。

有人知道因为发生这种事吗?

关于authentication - zend Framework 2 使用 Db 表进行身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103771/

相关文章:

rest - 使用不透明访问 token 是否会使我的服务器有状态?

zend-framework2 - Zend\Form\Form 不显示来自自定义验证器的错误消息

zend-framework - Zend 框架 : How to find a table row by the value of a specified column?

zend-framework - 如何在 where 子句中使用 Zend_Db_Table->update() 绑定(bind)变量

python - 从 DRF 中的 token 字符串获取用户对象?

facebook - 使用 AWS Cognito + Azure AD + Facebook 对用户进行身份验证

javascript - 去解析JWT : error verifying ID token: illegal base64 data at input byte 0

zend-framework2 - 如何在 Zend Framework 2 中使用自定义第三方库

zend-framework2 - Zend Framework 2 DI 别名,不同模块中的 Controller 名称相同

mysql - Zend Select and NOT IN 数组