0

CakePHPで、LDAPに対して入力基準をチェックすることで承認部分が行われるアプリを作成しようとしています。このページにリンクされているテキストをフォローしていますが、問題が発生しています。ユーザーテーブルを使用したくないので、データを保存することに興味はありません。私がやりたいのは、ユーザーがLDAPクレデンシャルを持っている場合に備えて、ユーザーにアクセスを許可することだけです。接続を安定させてデータを確認できましたが、アプリがセッションを保存しないため、ユーザーがログインすることはありません。何が間違っているのかわかりますか?

これはログイン機能です:

    public function login() {
    /*if($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash("Invalid data provided");
        }
    }*/
    App::import('Lib', 'ldap');
    if ($this->Session->read('Auth.User')) {
         $this->redirect(array('controller' => 'allocations', 'action' => 'index'));
    } elseif (!empty($this->data)) {
        $ldap = new ldap;
        if ($ldap->auth($this->Auth->request->data['User']['username'], $this->Auth->request->data['User']['password'])) {
            /*$userrow = $this->User->findByUsername($this->data['User']['username']);
            if (!$userrow) {
                $ldap_info = $ldap->getInfo($this->data['User']['username']);
                $this->data['User']['user'] = $this->data['User']['username'];
                $this->data['User']['name'] = $ldap_info['name'];
                $this->data['User']['group_id'] = 3; //sets the default group
                $this->add();
                $userrow = $this->User->findByUsername($this->data['User']['user']);
            }

            $user = $userrow['User'];*/
            $user = array()
            $this->Auth->Session->write($this->Auth->sessionKey, $user);
            $this->Auth->_loggedIn = true;
            $this->redirect($this->Auth->redirect());
            $this->Session->setFlash('You are logged in!');
        } else {
            $this->Session->setFlash(__('Login Failed', true));
        }
    }
}

ldap-> auth(基本的に外部ライブラリに格納されているldap_bind関数を呼び出す)をデバッグしようとしましたが、認証の結果は正しいです(メソッドは「true」を返します)。したがって、問題はセッションの作成にある必要があります。ユーザーが正しくログインしていて、セッションを保存する必要があることをCakePHPに知らせるにはどうすればよいですか?ありがとう!

4

1 に答える 1

2

によってユーザーデータをLDAPからセッションに書き込むことができます

$this->Session->write('Auth.User', array(
    'id' => 1,
    'username' => 'admin'
));

上記のコードを使用して、ユーザーをセッションに設定します。AuthComponentで動作します。
AuthComponent :: user()でユーザーの詳細を確認/取得できます

于 2013-01-17T03:55:20.170 に答える