Symfony2,如何使用FOSUser中的$ _POST值作为Fr3d_ldap包中的绑定凭据?

时间:2014-10-08 22:18:51

标签: php symfony ldap fosuserbundle

我已配置FOSUser + Fr3d/LdapBundle,现在我有一个 config.yml ,如下所示: config.yml

现在我遇到的问题是以前的实现(在Symfony1中)用户&由FOSUser登录表单提供的密码用作LDAP bind()的凭据,这很完美,因为我们需要将LDAP search()限制为他们拥有的任何权限

现在我想做同样的事情并拦截那些$ _POST变量并替换用户名&每次登录时都有密码参数。

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我修改了Fr3d \ LDAPBundle以满足我当前的需求,这解决了我的问题并希望能帮到某人:

编辑: 的供应商\ fr3d \ LDAP束\ FR3D \ LdapBundle \的Ldap \ LdapManager.php

添加此功能:

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

编辑: 的供应商\ fr3d \ LDAP束\ FR3D \ LdapBundle \驱动\ ZendLdapDriver.php

添加此功能:

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

编辑: 的供应商\ fr3d \ LDAP束\ FR3D \ LdapBundle \安全\认证\ 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!