Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2,如何在Fr3d\u ldap捆绑包中使用来自FOSUser的$\u POST值作为绑定凭据?_Php_Symfony_Ldap_Fosuserbundle - Fatal编程技术网

Php Symfony2,如何在Fr3d\u ldap捆绑包中使用来自FOSUser的$\u POST值作为绑定凭据?

Php Symfony2,如何在Fr3d\u ldap捆绑包中使用来自FOSUser的$\u POST值作为绑定凭据?,php,symfony,ldap,fosuserbundle,Php,Symfony,Ldap,Fosuserbundle,我已经配置好了,现在我有了一个config.yml,如下所示: 现在我遇到了一个问题,以前的实现(在Symfony1中)FOSUser的登录表单提供的用户和密码被用作LDAPbind()的凭据,这是完美的,因为我们需要将LDAPsearch()限制为他们拥有的任何权限 现在我想做同样的事情,截取那些$u POST变量,并在每个登录上替换用户名和密码参数 我怎么能这样做 我已经修改了Fr3d\LDAPBundle以满足我当前的需要,这解决了我的问题,希望能帮助某人: 编辑: vendor\fr3

我已经配置好了,现在我有了一个config.yml,如下所示:

现在我遇到了一个问题,以前的实现(在Symfony1中)FOSUser的登录表单提供的用户和密码被用作LDAPbind()的凭据,这是完美的,因为我们需要将LDAPsearch()限制为他们拥有的任何权限

现在我想做同样的事情,截取那些$u POST变量,并在每个登录上替换用户名和密码参数


我怎么能这样做

我已经修改了Fr3d\LDAPBundle以满足我当前的需要,这解决了我的问题,希望能帮助某人:

编辑: vendor\fr3d\ldap bundle\fr3d\LdapBundle\ldap\LdapManager.php

添加此功能:

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

它会自动执行。
fr3d_ldap
config中的用户名和密码用于ldap服务器,而不是实际的单个用户。注意:为了repo中的安全性,我在
参数.yml
中都有这些参数,比如
ldap.driver.username
,并在配置中使用
%ldap.driver.username%
引用它们。问题是它们不想为绑定过程创建独占的ldap用户,但他们希望绑定由尝试登录的同一用户执行:\
<?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;
        }
    }
}