Symfony ChainProvider FOSUser LDAPUser

问题描述

我想在我的网站上使用两个UserProvider。首先,我想测试LDAPProvider,如果LDAP中不存在该用户,则将调用FOSUserProvider来查看该用户是否存在于数据库中。我需要使用chainProviders。到目前为止,这是我所做的。 LDAP连接工作正常。 security.yaml:

security:
providers:
    chain_provider:
        chain:
            providers: [fos_userbundle,intranet_ldap]
    from_database:
        entity:
            class: App\Entity\User
            property: username
    fos_userbundle:
        id: fos_user.user_provider.username #fos_user.user_manager
    intranet_ldap:
        #Test avec surcharge LdapUserProvider
        id: App\Security\LdapUserProvider
firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            pattern:            /admin(.*)
            context:            user
            form_login:
                provider:       fos_userbundle
                login_path:     /admin/login
                use_forward:    false
                check_path:     /admin/login_check
                failure_path:   null
            logout:
                path:           /admin/logout
                target:         /admin/login
            anonymous:          true
            #switch_user: true
        main:
            pattern:            ^/
            context:            user
            anonymous:          true
            form_login_ldap:
                service:        Symfony\Component\Ldap\Ldap
                provider:       intranet_ldap
                login_path:     /login
                check_path:     /login_check
                dn_string:      'DC=xxx-group,DC=lan'
                query_string:   '(&(sAMAccountName={username}))'
                use_forward:    false
                always_use_default_target_path: true
                default_target_path: /profile
                use_referer:    true
            logout:
                path:  /logout
                target: /

在fos_user.yaml中:

fos_user:
  db_driver: orm # other valid values are 'mongodb' and 'couchdb'
  firewall_name: main
  user_class: App\Entity\User

  group:
    group_class:   App\Entity\Group
    group_manager: sonata.user.orm.group_manager # If you're using doctrine orm (use sonata.user.mongodb.group_manager for mongodb)
  service:
    user_manager: sonata.user.orm.user_manager

我不工作。我想我忘了一些东西。 LDAP仍然可以,但是数据库中的用户不可以。

我想知道它是否与form_login有关。来自FOSUserBundle的form_login用于管理员,而form_login_ldap用于主体。如何同时使用它们? 另外,我有一个LdapUser类和一个User类,它扩展了Sonata \ UserBundle \ Entity \ BaseUser,也许它应该扩展了FOSUser \ Entity \ BaseUser?

感谢您的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)