FOSUserBundle具有多个数据库

时间:2015-07-02 12:11:25

标签: php fosuserbundle symfony-2.3

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

如果我使用此链接中的CompilerPassInterface,那么系统fos_user对我有用。在另一个网站中将客户端作为fos_user插入。和 从当前网站登录。

但问题是,在我当前的网站中,即使我在当前网站中切换数据库连接,changepassword也无法正常注册。

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');
}

使用此方法存在问题

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

  2. 我的更改密码控制器无法正常工作,它给出了     我需要一个例外用户名。甚至再次强制连接到changepssword控制器中的当前数据库。

  3. 我尝试使用this method

    fos_user:
       db_driver: orm
       firewall_name: main
       user_class: Acme\UserBundle\Entity\User
       service:
           user_manager: acme.user_manager.conn1 # need to set default
    

    并尝试了

    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
    

0 个答案:

没有答案