2

私は Symfony2 を初めて使用し、上記のバンドルを使用して LDAP に接続しようとしています。ただし、不正な資格情報エラーが発生し続けます。理由がわかりません..

私の Security.yml ファイルは次のようになります。

security:
firewalls:
    restricted_area:
        pattern:          ^/login
        anonymous:        ~
        imag_ldap:
            check_path: login_check
            login_path: login
            csrf_provider: form.csrf_provider
            intention: authenticate
            provider: ldap
        logout:
            path:           /logout
            target:         /

providers:
    ldap:
        id: imag_ldap.security.user.provider

encoders:
    IMAG\LdapBundle\User\LdapUser: plaintext

access_control:
    - { path: ^/login,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/,               roles: IS_AUTHENTICATED_FULLY }

imag_ldap:
client:
    host: someip
    port: 389
#    version: 3 # Optional
#    username:  
#    password: 
#    network_timeout:
#    referrals_enabled:
#    bind_username_before:
#    skip_roles:

user:
    base_dn: dc=some, dc=dom, dc=ain
#    filter: null
    name_attribute: uid
#    attributes:

role:
    base_dn: dc=some, dc=dom, dc=ain
#    filter: null #Optional
    name_attribute: cn
    user_attribute: member
#    user_id: [ dn or username ] #Default dn

私のルートは次のとおりです。

login:
    pattern:              /login
    defaults:             { _controller: IMAGLdapBundle:Default:login }
    requirements:
    _method:            GET

login_check:
    pattern:              /login_check

logout:
    pattern:              /logout

実際に接続しているかどうかをテストできないようですが、接続しようとするとhttp://domain/app_dev.php/check_login次のエラーが表示されます。

Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?

ルートを追加する必要があると思いますが、わかり/login_checkません。もしそうなら、どのように私はldap接続を呼び出すのですか?

編集

OK 私は手を握る必要があると思います.. security.yml を次のように変更しました:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~ 
    providers:
        ldap:
           id: imag_ldap.security.user.provider

    encoders:
        IMAG\LdapBundle\User\LdapUser: plaintext

    access_control:
        - { path: ^/login,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/,               roles: IS_AUTHENTICATED_FULLY }

しかし、今は次のエラーが発生しています: LogicException: No authentication listener registered for firewall "restricted_area".

SO私は次のことを試しました:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~ 
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /

しかし、これはリダイレクト ループを引き起こします。

編集 2 コメントで述べたように、これの 2 番目の部分は別の問題であり、ここで見つけることができます: Symfony 2 Security.yml リダイレクト ループと LogicException の問題

4

1 に答える 1

1

login_checkファイアウォールの背後にも配置する必要があります。

firewalls:
    restricted_area:
        pattern: ^/
        #anonymous: ~
    login_firewall:
            pattern:    ^/login$
            anonymous:  ~

ところで、これは一般的な落とし穴の回避セクションに記載されている一般的な落とし穴です。

ここであなたを助けるかもしれない同様のものがあります。

于 2013-04-23T03:05:54.010 に答える