使用相同的Symfony 2/3 project DB以编程方式登录到不同的域
我有一个单一的Symfony项目。但它管理最终客户使用的N个域,因此我们可以拥有不同的品牌和策略。在另一个域中,我们可以访问项目的后台视图。 在customers视图中,我们希望在相应的域中模拟我们的客户 我的策略是 当一个职员用户登录到我们的任何一个域时,我想自动地、静默地登录到其他域。因此,当按钮重定向到另一个域/?\u username=XXX时,将无法登录 我的不完全执行是错误的 -听着,登录成功了, -从请求中获取用户名和密码 -对api的调用使用相同的Symfony 2/3 project DB以编程方式登录到不同的域,symfony,session,Symfony,Session,我有一个单一的Symfony项目。但它管理最终客户使用的N个域,因此我们可以拥有不同的品牌和策略。在另一个域中,我们可以访问项目的后台视图。 在customers视图中,我们希望在相应的域中模拟我们的客户 我的策略是 当一个职员用户登录到我们的任何一个域时,我想自动地、静默地登录到其他域。因此,当按钮重定向到另一个域/?\u username=XXX时,将无法登录 我的不完全执行是错误的 -听着,登录成功了, -从请求中获取用户名和密码 -对api的调用 $data['_username'] =
$data['_username'] = $req->request->get('username');
$data['_password'] = $req->request->get('password');
$response = $this->client->post(‘thedomain/noauth/login', [
'form_params' => $data,
]
);
如果可能的话(我不知道)应该能够用这个浏览器登录它的域
我不知道是否可以使用我在API端点中创建的JWT令牌并更改admin firewall区域的安全配置来实现,或者可能需要使用UserNamePasswordToken模拟完整的登录
也许我不应该依赖端点请求对象
$jwt = $this->get('lexik_jwt_authentication.jwt_manager');
$jwt_token = $jwt->create($user);
$token = new UsernamePasswordToken($user, null, 'firewallname', $user->getRoles());
$this->get("security.token_storage")->setToken($token);
$session = $request->getSession();
$session->set('_security_main', serialize($token));
此外,我不知道在浏览器上存储cookie是否还有更多的工作要做
我有很多疑问,为了缩短我的测试时间,非常感谢您的帮助
更新
尝试blast解决方案(请参见答案1),当我运行composer require“blast项目/条令会话包”时,我遇到以下错误:
Problem 1
- Installation request for blast-project/doctrine-session-bundle ^0.1.0 -> satisfiable by blast-project/doctrine-session-bundle[0.1].
- blast-project/doctrine-session-bundle 0.1 requires blast-project/base-entities-bundle dev-master -> satisfiable by blast-project/base-entities-bundle[dev-master] but these conflict with your requirements or minimum-stability.
因此,我将这一行临时添加到我的composer.json“最小稳定性”:“dev”但仍会出错,对SF3不友好吗
Problem 1
- Can only install one of: symfony/symfony[v3.2.4, 2.8.x-dev].
- Can only install one of: symfony/symfony[2.8.x-dev, v3.2.4].
- Can only install one of: symfony/symfony[2.8.x-dev, v3.2.4].
- blast-project/core-bundle dev-master requires symfony/symfony 2.8.* -> satisfiable by symfony/symfony[2.8.x-dev].
- blast-project/base-entities-bundle dev-master requires blast-project/core-bundle dev-master -> satisfiable by blast-project/core-bundle[dev-master].
- blast-project/doctrine-session-bundle 0.1 requires blast-project/base-entities-bundle dev-master -> satisfiable by blast-project/base-entities-bundle[dev-master].
- Installation request for blast-project/doctrine-session-bundle ^0.1.0 -> satisfiable by blast-project/doctrine-session-bundle[0.1].
- Installation request for symfony/symfony (locked at v3.2.4, required as 3.*) -> satisfiable by symfony/symfony[v3.2.4].
您应该只将会话存储在共享数据库中,因为它是共享的。您没有要执行的实现。您只需将会话存储在数据库中。symfony将自行设置cookie,然后当您访问其他服务器时,它们可以读取此cookie,因为它们从同一数据库读取会话数据 这是我用来做这件事的包: 还有我做的项目:
听起来不错,但在SF3下,我无法按照composer的要求或安装库。。。。我更新了包含错误的问题…我将在本周末尝试更新捆绑包的自述,以包含轻松安装说明