Intereting Posts
$ _POST против $ HTTP_RAW_POST_DATA vs file_get_contents (php: // input)? PHP: имена аргументов функции Регулярное выражение для шаблонов слишком сильно захватывает Группировка дат в месяцах в php mod_rewrite не работает htaccess сделать php-сгенерированную форму переменной доступной в двух php-файлах Как удалить адреса электронной почты и ссылки из строки в PHP? Каков наиболее эффективный способ получить часть удаленного XML-файла через PHP? preg_match все слова начинаются с @? Создайте изображение с помощью GD, содержащего другие изображения Как определить максимальное ограничение загрузки файлов в php Добавление класса css к определенным элементам активного контрольного списка Yii Не удалось подключиться к почтовому серверу в порту «localhost» 25 Symfony 2 / Doctrine 2: два объекта для одной таблицы, используйте один в пользу другого Яркая фатальная ошибка: аргумент прошел не в правильном экземпляре

CakePHP 3 Проблема аутентификации Ldap и уточнение

Я работаю над интеграцией аутентификации LDAP в моем проекте. и я следил за учебником на официальном сайте CakePHP, который описывает, как создать пользовательский объект в пути src-приложения и использовать эти пользовательские объекты в AuthController.

Поэтому я создал папку с именем Auth в src с именем файла LdapAuthorize.php. Путь выглядит так: src / Auth / LdapAuthorize.php

Вот мой код LdapAuthorize.php:

namespace App\Auth; use Cake\Auth\BaseAuthorize; use Cake\Network\Request; class LdapAuthorize extends BaseAuthorize { public function authorize($user, Request $request) { if ($user == 'username') { // where username is logged on ldap user on a computer. return true; } } } 

Я также назвал объект в файле AppController.php. Вот мой код:

 public function initialize() { parent::initialize(); $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Customers', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Pages', 'action' => 'display', 'home' ] ]); $this->Auth->config('authenticate', [ 'Ldap' ]); } 

Поэтому, когда я обращаюсь к URL- адресу http: // localhost / AppPath / Dashboard / index, я получаю Authentication adapter "Ldap" was not found.

Поскольку это мой первый опыт работы с CakePHP, я не мог найти много решений в Интернете, которые помогают устранять любые проблемы.

Добавление дополнительного кода для LdapAuthenticate.php:

 namespace App\Auth; use Cake\Auth\BaseAuthenticate; use Cake\Network\Request; use Cake\Network\Response; class OpenidAuthenticate extends BaseAuthenticate { public function authenticate(Request $request, Response $response) { $users = ["john", "ray"]; return $users; } } 

Solutions Collecting From Web of "CakePHP 3 Проблема аутентификации Ldap и уточнение"

Что вам нужно – это настраиваемый адаптер аутентификации , ваш LdapAuthorize – это настраиваемый адаптер авторизации :

 // in src/Auth/LdapAuthenticate.php namespace App\Auth; use Cake\Auth\BaseAuthenticate; use Cake\Network\Request; use Cake\Network\Response; class LdapAuthenticate extends BaseAuthenticate { protected $_host = 'your_ldap_server' ; public function authenticate(Request $request, Response $response) { $username = $request->data['username'] ; $password = $request->data['password'] ; $ds = @ldap_connect($this->_host) ; if (!$ds) { throw \Cake\Error\FatalErrorException ('Unable to connect to LDAP host.') ; } $basedn = "your ldap query... " $dn = "uid=$username, ".$basedn; $ldapbind = @ldap_bind($ds, $dn, $password); if (!$ldapbind) { return false ; } // Do whatever you want with your LDAP connection... $entry = ldap_first_entry ($ldapbind) ; $attrs = ldap_get_attributes ($ldapbind, $entry) ; $user = [] ; // Loop for ($i = 0 ; $i < $attrs["count"] ; $i++) { $user[$attrs[$i]] = ldap_values ($ldapbind, $entry, $attrs[$i])[0] ; } // Then close it and return the authenticated user ldap_unbind ($ldapbind) ; ldap_close ($ldapbind); return $user ; } } 

У меня была такая же ошибка после создания адаптера пользовательской аутентификации, предложенного выше.

Я решил это изменить
namespace App\Auth;

для

 namespace Cake\Auth; 

В LdapAuthenticate.php