Symfony2, как использовать значения $ _POST из FOSUser в качестве учетных данных связывания в комплекте Fr3d_ldap?

Я настроил FOSUser + Fr3d / LdapBundle и теперь у меня есть config.yml как это:
config.yml

Теперь у меня есть проблема, что предыдущие реализации (в Symfony1) пользователя & пароль, предоставленный формой входа FOSUser, использовался в качестве учетных данных для LDAP связывания (), это было прекрасно, потому что нам нужно было ограничить LDAP поиск() к любым разрешениям, которые они имеют.

Теперь я хотел бы сделать то же самое и перехватить эти переменные $ _POST и подставить имя пользователя & параметры пароля при каждом входе в систему.

Как я мог это сделать?

1

Решение

Я изменил Fr3d \ LDAPBundle в соответствии со своими текущими потребностями, это решает мою проблему и, надеюсь, поможет кому-то:

Редактировать:
поставщик \ Fr3d \ LDAP-расслоение \ Fr3d \ LdapBundle \ Ldap \ LdapManager.php

Добавьте эту функцию:

<?php
public function setOptions($options) {
$this->driver->setOptions($options);
}

Редактировать:
поставщик \ Fr3d \ LDAP-расслоение \ Fr3d \ LdapBundle \ Driver \ ZendLdapDriver.php

Добавьте эту функцию:

<?php
public function setOptions($options)
{
$this->driver->setOptions(array_merge($this->driver->getOptions(), $options));
}

Редактировать:
поставщик \ Fr3d \ LDAP-расслоение \ Fr3d \ LdapBundle \ Security \ Authentication \ LdapAuthenticationProvider.php

Измените функцию retrieveUser (…):

<?php
protected function retrieveUser($username, UsernamePasswordToken $token)
{
$user = $token->getUser();
if ($user instanceof UserInterface) {
return $user;
}

$this->ldapManager->setOptions(array( 'username' => $token->getUser(), 'password' => $token->getCredentials()));

try {
$user = $this->userProvider->loadUserByUsername($username);

return $user;
} catch (UsernameNotFoundException $notFound) {
throw $notFound;
} catch (\Exception $repositoryProblem) {
if (Kernel::MINOR_VERSION <= 1) {
throw new AuthenticationServiceException($repositoryProblem->getMessage(), $token, (int)$repositoryProblem->getCode(), $repositoryProblem);
} else {
$e = new AuthenticationServiceException($repositoryProblem->getMessage(), (int)$repositoryProblem->getCode(), $repositoryProblem);
$e->setToken($token);
throw $e;
}
}
}

Вот и все !, теперь учетные данные для входа в FOSUser используются для Bind () на сервере.

Возможно, параметр конфигурации был бы лучше, но сейчас это решает мою проблему.

Спасибо Qoop!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]