Symfony2:使用两个不同的用户提供程序登录网站时无法模拟用户

Posted

技术标签:

【中文标题】Symfony2:使用两个不同的用户提供程序登录网站时无法模拟用户【英文标题】:Symfony2: unable to impersonate user when website log-in using two different user providers 【发布时间】:2012-10-16 14:07:18 【问题描述】:

在我的网站中,用户可以使用简单帐户(在我的网站中创建,配置 MY_OWN_USER 提供程序,通过电子邮件选择用户)或使用 facebook 登录(通过 fosfacebook bundle 集成)登录。

当我试图模拟用户时(附加链接'...?_switch_user=demo@demo.com',如Symfony2 documentation 中所述)Symfony2 记录此类警告:

security.WARNING:切换用户失败:“用户未在 facebook 上进行身份验证”

我已经检查了 Symfony\Component\Security\Http\Firewall\SwitchUserListener 并且看起来默认情况下它不是 MY_OWN_USER 提供程序,而是 fosfacebook 提供程序,它试图通过 facebook_id 选择用户(如果我附加链接使用 '...?_switch_user=FACEBOOK_ID' - 切换用户正常工作!)

那么如何让 SwitchUserListener 获得 MY_OWN_USER 提供者,该提供者通过电子邮件而不是 facebook id 选择用户?

【问题讨论】:

当然我可以尝试将 SwitchUserListener 更改为它会通过电子邮件(而不是用户名)选择用户,但也许还有其他方法无需更改 Symfony2 源代码 :) 【参考方案1】:

security.yml 的防火墙配置中配置模拟时,您可以指定应使用哪个提供程序来查找被模拟的用户 (ref)。例如:

switch_user:
    provider: MY_OWN_USER

希望这会有所帮助!

【讨论】:

以上是关于Symfony2:使用两个不同的用户提供程序登录网站时无法模拟用户的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 多 FosUserBundle

将旧用户迁移到 symfony2

使用 FOSUserBundle 自动登录 Symfony2 [重复]

Symfony2:如何使用非默认实体管理器对用户进行身份验证?

Symfony2 安全不同的防火墙不能正确重定向到登录

在 Symfony2 中使用自定义身份验证提供程序