Php 具有多个数据库的FOSUserBundle

Php 具有多个数据库的FOSUserBundle,php,fosuserbundle,symfony-2.3,Php,Fosuserbundle,Symfony 2.3,我有一个系统。在一个有客户的实体中。我想从这个系统向另一个网站/系统的客户端发送身份验证,并将这个客户端作为fos_用户转储/插入该系统。在这两个系统中,我都使用FOSUserBundle进行用户登录/身份验证 如果我从这个链接使用,它对我和系统用户都有好处。将客户作为fos_用户插入另一个网站。及 从当前网站登录 但问题是,在我当前的网站中,即使我在当前网站中切换数据库连接,更改密码和注册也不起作用 public function sendAuthAction(Request $request

我有一个系统。在一个有客户的实体中。我想从这个系统向另一个网站/系统的客户端发送身份验证,并将这个客户端作为fos_用户转储/插入该系统。在这两个系统中,我都使用FOSUserBundle进行用户登录/身份验证

如果我从这个链接使用,它对我和系统用户都有好处。将客户作为fos_用户插入另一个网站。及 从当前网站登录

但问题是,在我当前的网站中,即使我在当前网站中切换数据库连接,更改密码和注册也不起作用

public function sendAuthAction(Request $request)
{
    $user = $this->get('security.context')->getToken()->getUser();

    $request  = $this->getRequest();
    $id = $request->get('id');
    $em = $this->get('doctrine')->getManager();
    $client = $em->getRepository('AcmeClientBundle:Clients')->find($id);

    $username = $client->getName();
    $password= "";//here i auto generate the password;
    $email= $client->getEmail();
    $this->get('doctrine.dbal.dynamic_connection')->forceSwitch($dbname2, $dbuser2, $dbpass2);
    $em2 = $this->get('doctrine')->getManager('dynamic');
    $client = $em2->getRepository('AcmeUserBundle:User')->findBy(array('email' => $email));
    if($client)
    {
        return new JsonResponse('You had alreay send authentication to this client.');
    }
    $userManager = $this->container->get('fos_user.user_manager');

    $newuser = $userManager->createUser();

    $newuser->setEnabled(true);
    $newuser->setPlainPassword($password);
    $newuser->setUsername($username);
    $newuser->setRoles(array('ROLE_USER'));
    $newuser->setEmail($email);

    $userManager->updateUser($newuser, true);

    $this->get('doctrine.dbal.dynamic_connection')->forceSwitch($dbname, $dbuser, $dbpass);
    return new JsonResponse('success');
}
使用这种方法可以解决问题

  • 在另一个连接中插入客户端后,我从当前连接注销 系统

  • 我的更改密码控制器不工作,它会 我需要一个例外用户名。甚至再次强制连接到ChangePSWord控制器中的当前db

  • 我试着用

    也试过了

    model_manager_name: dynamic #or default
    
    但在这种情况下,config.yml FOSUserBundle中定义的任何连接都只适用于该连接。所以我可以在当前系统中登录和注册,也可以在第二个系统中立即插入客户端

    我想知道有没有任何方法,我在两种学说的连接之间进行切换,同时为这两种学说都进行FOSUserBundle工作

    我的配置文件在这里:

    doctrine:
      dbal:
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                mapping_types:
                    enum: string              
            dynamic:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name2%" # it's not given in case of compilerpassinterface
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                mapping_types:
                    enum: string
                wrapper_class: 'Acme\DoctrineBundle\Connection\ConnectionWrapper' #it's in case for dynamically switching db. 
    
       orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
                connection: default
                mappings:
                    FOSUserBundle: ~
                    AcmeUserBundle: ~
                    AcmeClientBundle: ~
            dynamic:
                connection: dynamic
                mappings:
                    FOSUserBundle: ~
                    AcmeUserBundle: ~
                    AcmeClientBundle: ~
    
    fos_user:
       db_driver: orm
       firewall_name: main
       user_class: Acme\UserBundle\Entity\User
       registration:
          form:
             type: acme_user_registration
       change_password:
          form:
             type: acme_user_change_password
             name: acme_user_change_password
    
    doctrine:
      dbal:
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                mapping_types:
                    enum: string              
            dynamic:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name2%" # it's not given in case of compilerpassinterface
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                mapping_types:
                    enum: string
                wrapper_class: 'Acme\DoctrineBundle\Connection\ConnectionWrapper' #it's in case for dynamically switching db. 
    
       orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
                connection: default
                mappings:
                    FOSUserBundle: ~
                    AcmeUserBundle: ~
                    AcmeClientBundle: ~
            dynamic:
                connection: dynamic
                mappings:
                    FOSUserBundle: ~
                    AcmeUserBundle: ~
                    AcmeClientBundle: ~
    
    fos_user:
       db_driver: orm
       firewall_name: main
       user_class: Acme\UserBundle\Entity\User
       registration:
          form:
             type: acme_user_registration
       change_password:
          form:
             type: acme_user_change_password
             name: acme_user_change_password