2015-09-15 4 views
2

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

Итак, я создал папку под названием Auth in 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; 
    } 
} 

ответ

3

Что вам нужно, это custom authentication adapter, ваш LdapAuthorize является custom authorize adapter:

// 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 ; 
    } 

} 
+0

я вижу. Я также добавил пользовательский адаптер аутентификации в свой проект, в котором я создал массив со списком пользователей для возврата. Я все еще получаю «Адаптер аутентификации» Ldap «не найден». Поэтому я также попробовал '$ this-> Auth-> config ('authenticate', ['App \ Auth \ Ldap']);' Не уверен, что еще я отсутствует. – Ray

+0

@Ray Создал ли файл 'src/Auth/LdapAuthenticate.php' код в своем ответе? Я не знаю, работает ли 'App \ Auth \ Ldap' для параметра' authenticate', вы должны попробовать с помощью простого 'Ldap'. Я не понимаю, что вы подразумеваете под «Я создал массив со списком пользователей для возврата»? Если у вас есть что-то еще в вашем проекте, добавьте его в свой вопрос с подробной информацией. – Holt

+0

Да, я создал файл в 'src/Auth/LdapAuthenticate.php' с указанным выше кодом. Я включаю это в мой вопрос, который я опубликовал ранее. В LdapAuthenticate я создал массив с пользователями, которым разрешено входить в систему, поэтому я могу работать с исходным компонентом, прежде чем начинать писать PHP-код, связанный с LDAP, для подключения к каталогу Activie. Нужно ли также вносить какие-либо изменения в маршрутизацию? – Ray

2

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

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

для

namespace Cake\Auth; 

В LdapAuthenticate.php

Смежные вопросы