0

我正在使用 CakePHP 构建一个应用程序并尝试合并一个自定义身份验证对象,但它似乎无法找到它。尝试登录时出现以下错误:“未找到身份验证适配器“LdapAuthorize””。我已经使用我的代码创建了文件 app/Controller/Component/Auth/LdapAuthorize.php 以进行身份​​验证。在“AppController.php”的顶部附近我有

App::uses('LdapAuthroize', 'Controller/Component/Auth/LdapAuthorize');

在 AppController 类中我有

public $components = array(
        'Session',
        'Auth' => array(
            'loginRedirect'  => array('controller' => 'pendings', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
            'authorize'      => array('Controller'),
            'authenticate'   => array('LdapAuthorize')
        )
    );

然后在我的 UsersController.php 中我有以下登录功能。

        public function login() {       

        if($this->request->is('post')) {
            if($this->Auth->login()) { 
                                // My Login stuff...
                            }
                    else
                        $this->redirect(array('controller'=>'someController', 'action'=>'someAction'));         
        }
    }

如果有人知道为什么它似乎无法加载我的自定义身份验证对象,那真是太棒了。谢谢!

4

2 回答 2

2

我认为你App::uses()错了,所以它找不到课程。您当前的代码:

App::uses('LdapAuthroize', 'Controller/Component/Auth/LdapAuthorize');

正在尝试查找Controller/Component/Auth/LdapAuthorize/LdapAuthroize.php

第一个参数是类名(你有一个错字),第二个只是包含类的目录的路径,你不需要再次添加类名。

尝试这个:

App::uses('LdapAuthorize', 'Controller/Component/Auth');
于 2013-08-07T16:01:46.563 回答
2

我将自定义身份验证类放在Controller/Component/Auth中。例如,我的类的名称是CustomUserAuthenticate,文件的路径是,

控制器/组件/Auth/CustomUserAuthenticate.php

然后在我的AppController中,我将以下内容添加到authenticate数组中,

class AppController extends Controller {      
    public $components = array(
        'Auth' => array(
            /** Any other configuration like redirects can go here */
            'authenticate' => array(
                'CustomUser'
            )
        )
    );
}

数组中的字符串必须与类的名称匹配,但Authenticate单词authenticate除外。

我的CustomUserAuthenticate类扩展了 CakePHP 的Controller/Component/Auth/BaseAuthenticate并覆盖了该authenticate方法。CakePHP 的文档声明这不是必需的。我没有尝试过这种方式。

于 2013-10-22T15:58:42.180 回答