5

symfony でユーザー認証を機能させるのに問題があります。login_path正常に動作していますが、誤動作しcheck_pathています。私が指定したパスは、有名なUnable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?

私は他の投稿を見てきましたが、それらはすべて私がしていることをしているようです。私は symfony に非常に慣れておらず、概念を理解するのに苦労しています。

それが違いを生む場合、私はSymfony 2.1を使用しています。

すべてが適切に構成されていると思います。

security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        Site\CommonBundle\Entity\User: plaintext

    role_hierarchy:
        ROLE_LIGHT:       ROLE_LIGHT
        ROLE_ADMIN:       [ROLE_LIGHT, ROLE_USER]
        ROLE_SUPER_ADMIN: [ROLE_LIGHT, ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        database:
            entity: { class: SiteCommonBundle:User }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login_firewall:
            pattern:  ^/(login|logout|login_check)
            anonymous: ~

        secured:
            pattern: ^/secured/
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path: /logout
                target: /


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

ルーティング.yml

common_login:
    pattern:  /login
    defaults: { _controller: SiteCommonBundle:Default:login }

common_login_check:
    pattern: /login_check
4

1 に答える 1

11

パスはlogin_check、保護された領域内にある必要があります。

あなたのコードでは、パターンは「/secured」の接頭辞を定義しているため、login_check にも「/secured」を接頭辞として付ける必要があります。

あなたの場合、セキュリティで保護されたファイアウォールは、すべてのパスがプレフィックスで始まることを定義します/securedが、ログイン チェック パスのパスは/login_check. したがって、ファイアウォールはフォームを処理できません。

login_firewall からも削除する必要があると思います。

于 2012-12-21T22:00:49.187 に答える