【问题标题】:symfony impersonate across different hostssymfony 跨不同主机模拟
【发布时间】:2016-12-14 23:27:04
【问题描述】:

我试图在 Symfony 中模拟不同的用户,但与 Symfony impersonation - separate firewalls and separate user providers 等其他示例不同,在我的情况下,不仅提供者不同,而且主机不同。

firewalls:
   admin:
        pattern: ^/
        host: "%host_admin%"
        provider: admin
[...]
      switch_user:
        role: ROLE_ADMIN
        provider: client
        #host: "%host_public%" <-- tried this.. does not work
        context: cmb_context

   client:
        pattern: ^/
        host: "%host_public%"
        provider: client
[...]
      switch_user:
        role: ROLE_ADMIN
        provider: client
        context: cmb_context

因此,当我尝试模拟用户时,通过此设置,它仍保留在管理站点中,当然,已正确获取的客户端无法在管理端进行身份验证。当然,当移动到客户端时,身份验证会话不存在。

我尝试让系统的主机知道在哪里冒充“in”但没有运气。

我可能不得不求助于http://symfony.com/doc/current/security/impersonating_user.html#events 中提到的听众,但我还没有找到有关如何做到这一点的详细信息。

有什么想法吗?提前致谢。

【问题讨论】:

  • 嗨@rrubiorr81,你找到解决方案了吗?我也面临同样的问题
  • 我想我没有@NuryagdyMustapayev .. 最终做了一些不同的事情。如果可行的话,仍然很好奇;)

标签: php symfony impersonation


【解决方案1】:

chainUserProvider 允许您将一个或多个用户提供程序添加在一起,以便您可以从这些多个来源获取用户。请注意,将提供程序添加到 ChainUserProvider 的顺序很重要:一旦找到用户,它就会检查该用户,即使该用户的凭据失败。

parameters:
    chain_providers: "mydatabase1,mydatabase2"

security:
    providers:
        mydatabase1:
            entity:
                class: My\UserBundle\Entity\Admin
                property: username

        mydatabase2:
            entity:
                class: My\UserBundle\Entity\Customer
                property: username

        my_chain:
            chain:
                providers: %chain_providers%

【讨论】:

  • 感谢@Mohamed 的回答。我遇到的问题是没有将实体数据拉到我的防火墙中,我什至可以在页面底部的 symfony 开发栏中看到正确的用户名(其他公共实体之一);但能够在不同的主机中作为同一实体登录(最初我在管理主机中,我想在客户端主机中作为客户端登录)...
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2018-09-20
  • 2018-05-27
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多