Я работаю над интеграцией аутентификации 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; } }
Что вам нужно – это настраиваемый адаптер аутентификации , ваш 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