0

認証に失敗し、getDbSelect() を実行しようとしても何も得られません...何が間違っていましたか?

クラス AuthController は Zend_Controller_Action を拡張します
{
    保護された $auth;

    パブリック関数 init()
    {
        $db = $this->getInvokeArg("bootstrap")->getResource("db");
        $this->auth = new Zend_Auth_Adapter_DbTable($db, 'users', 'username', 'password', 'md5(?)');
    }
    パブリック関数 loginAction()
    {
        if (isset($_POST["ユーザー名"])) {
            $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 = new Zend_Db_Adapter_Pdo_Mysql(array(
    'ホスト' => '127.0.0.1',
    'ユーザー名' => 'ルート',
    'パスワード' => '',
    '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(?) 処理をサポートしていません

2回目の試行で、間違った列名を指定しました...名前とユーザー名...

于 2009-09-24T10:45:51.980 に答える