ldap в yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
sirodzhovss
Сообщения: 1
Зарегистрирован: 2023.05.10, 16:00

ldap в yii2

Сообщение sirodzhovss »

Подскажите пожалуйста, входит в ldap, но не входит на сервер, в чем проблема?,
<?php
namespace app\models;

use Yii;
use yii\base\Model;

/**
* LoginForm is the model behind the login form.
*
* @property User|null $user This property is read-only.
*
*/
class LoginForm extends Model
{
private $_id;
public $username;
public $password;
public $rememberMe = true;

private $_user = false;


public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
];
}

public function attributeLabels()
{
return [
'username' => 'Логин',
'password' => 'Пароль',
'rememberMe' => 'Запомнить меня.',

];
}

public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();

if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Логин/пароль введены не верно.');
}
}
}

public function getUser()
{
if ($this->_user === false) {
$this->_user = User::findByUsername($this->username);
}
return $this->_user;

}



public function login()
{
if ($this->validate() && !is_null($this->_user = $this->getUser())) {
if (Yii::$app->user->login($this->_user, $this->rememberMe ? 3600 * 24 * 30 : 0));
return $this->_user;
}
global $login_error; // текст ошибки, если авторизация не пройдена
$domain="ex";
$ldaphost = "exx";
$ldapport = "389";
$base = "ou=Departments,dc=ad,dc=kubbti,dc=ru";
$filter="(*)";
$username = $this->username;

$password = $this->password;
//подсоединяемся к LDAP серверу
$ldap = ldap_connect($ldaphost,$ldapport) or die('Cannot connect to LDAP Server.');
//Включаем LDAP протокол версии 3
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
//Отключаем обработку рефералов для ldap v3
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP OPT REFERRALS');
var_dump(@ldap_bind($ldap, 'infotest.ad.kubbti.ru', 'password')); //хз зачем
if ($ldap) /* Получаем данные из AD */
{
// Пытаемся войти в LDAP при помощи введенных логина и пароля
$bind = @ldap_bind($ldap,$username,$password);
if ($bind) //Привязка LDAP прошла успешно!
{
// Проверим, является ли пользователь членом указанной группы и не отключен ли он.
$result = ldap_search($ldap,$base,"(samAccountName=".$username.")");;
$result_ent = ldap_get_entries($ldap,$result);

if (!$result) {
$login_error = 'Ошибка обращения к LDAP.';
return false;
}
// Получаем количество результатов предыдущей проверки
$result_ent = ldap_get_entries($ldap,$result);
if (!$result_ent)
{
$login_error = 'Результатов проверки получить не удалось';
return false;
}

}
else
{
$login_error = 'Вы ввели неправильный <br>логин или пароль';
return false;
}
return $ldap=ldap_connect($ldaphost,$ldapport);
ldap_close($ldap);
}

if ($result_ent['count'] != 0 )
{
// тут код в случае если авторизации пройдена
$fullname = $result_ent[0]["displayname"][0]; //полное имя пользователя
$_SESSION["fullname"] = $fullname; //сохраняем в переменной сессии для отображения
return true;
exit;
}
else
{
$login_error = 'К сожалению, вам доступ закрыт.';
return false;
}


}


}
Ответить