我有一个系统。在那个与客户有关的实体中。在这个系统中,我想将身份验证发送到另一个网站/系统的客户端,并将该客户端作为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');
}
使用此方法存在问题
在另一个连接中插入客户端后,我从当前注销 系统。
我的更改密码控制器无法正常工作,它给出了 我需要一个例外用户名。甚至再次强制连接到changepssword控制器中的当前数据库。
我尝试使用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