0

我的身份验证失败,当我尝试 getDbSelect() 时,我什么也没得到……我做错了什么?

类 AuthController 扩展 Zend_Controller_Action
{
    受保护的 $auth;

    公共函数初始化()
    {
        $db = $this->getInvokeArg("bootstrap")->getResource("db");
        $this->auth = new Zend_Auth_Adapter_DbTable($db, 'users', 'username', 'password', 'md5(?)');
    }
    公共函数 loginAction()
    {
        if (isset($_POST["username"])) {
            $result = $this->auth
                ->setIdentity($this->getRequest()->getParam('username'))
                ->setCredential($this->getRequest()->getParam('password'));
            回声“>”。$this->auth->getDbSelect();die();
            $result = $this->auth
                ->setIdentity($this->getRequest()->getParam('username'))
                ->setCredential($this->getRequest()->getParam('password'))
                ->认证();
            if ($result->isValid()) {
                $this->_redirect("postLogin");
            }
        }
    }

更新1:

我也尝试过不使用 MVC 和我更熟悉的 MySQL:

// 设置自动加载
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

//设置数据库连接
$db = 新 Zend_Db_Adapter_Pdo_Mysql(array(
    '主机' => '127.0.0.1',
    '用户名' => 'root',
    '密码' => '',
    'dbname' => 'learnZendAuth'
));

// 创建认证适配器
$auth = new Zend_Auth_Adapter_DbTable($db, 'users', 'username', 'password', 'md5(?)');

// 如果请求已发布,则进行登录
if (isset($_POST) && !empty($_POST)) {
    // 进行身份验证
    $result = $auth->setIdentity($_POST['username'])
         ->setCredential($_POST['password'])
         ->认证();

    // 检查身份验证是否有效
    if ($result->isValid()) {
        // 登录成功
        echo "成功登录为:" . $result->getIdentity();
    } 别的 {
        // 登录失败
        回声“
";
        print_r($result->getMessages());
        回声“
"; } } 别的 { // 请求未发布 // 查看是否已经登录 if (Zend_Auth::getInstance()->hasIdentity()) { echo "已经登录为:" . Zend_Auth::getInstance()->getIdentity(); } }

我明白了

致命错误:未捕获的异常 'Zend_Auth_Adapter_Exception' 带有消息“提供给 Zend_Auth_Adapter_DbTable 的参数未能生成有效的 sql 语句,请检查表名和列名的有效性。” 在 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Auth\Adapter\DbTable.php:414 堆栈跟踪:#0 C:\Program Files (x86)\Zend\ZendServer\share \ZendFramework\library\Zend\Auth\Adapter\DbTable.php(306): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select))

1 C:\Program Files (x86)\Zend\Apache2\htdocs\learnZf\index.php(23):

Zend_Auth_Adapter_DbTable->authenticate()

2 {main} 在 C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Auth\Adapter\DbTable.php 中抛出

在线 414

4

2 回答 2

0

尝试在 is valid 语句中移动 getDbSelect,我通常也使用

$userInfo = $this->auth->getResultRowObject();

获取用户信息,从未见过这个 getDbSelect 方法

于 2009-09-23T06:56:34.517 回答
0

哦,我发现我做错了什么......

第一次尝试,我用的是 Sqlite,它不支持 md5(?) 处理

第二次尝试,我指定了错误的列名...名称与用户名...

于 2009-09-24T10:45:51.980 回答