使用CakePHP进行LDAP身份验证

使用CakePHP进行LDAP身份验证,cakephp,authentication,ldap,Cakephp,Authentication,Ldap,我正在尝试创建一个应用程序,其中授权部分是通过在CakePHP上对照LDAP检查输入条件来完成的。我在听课文,但我有问题。我不想使用任何用户表,我对存储数据没有兴趣。我所要做的就是在用户有LDAP凭据的情况下授予他们访问权限。我设法建立了连接并检查了数据,但应用程序不会保存会话,因此用户从未登录。你知道我做错了什么吗 这是登录功能: public function login() { /*if($this->request->is('post')) {

我正在尝试创建一个应用程序,其中授权部分是通过在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函数),并且auth的结果是正确的(该方法返回“true”)。因此,问题在于会话的创建。如何让CakePHP知道用户已正确登录,并且必须存储会话?谢谢

您可以通过以下方式将用户数据从ldap写入会话:

$this->Session->write('Auth.User', array(
    'id' => 1,
    'username' => 'admin'
));
我使用上面的代码在会话中设置用户。它与AuthComponent一起工作。

您可以通过AuthComponent::user()检查/获取用户详细信息。

太好了!这就是我要找的!谢谢!