微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Symfony ChainProvider FOSUser LDAPUser

如何解决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 举报,一经查实,本站将立刻删除。