2

私は Symfony2 を初めて使用し、基本的な登録 + ログイン システムを作成しようとしています。そこで、Symfony2 のドキュメントを参考にして、次の security.yml を作成しました。

security:
    encoders:
        TestCompany\InternetBundle\Entity\Member:
            algorithm:        sha1
            encode_as_base64: false
            iterations:       1

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

    providers:
        administrators:
            entity: { class: TestCompanyInternetBundle:Member, property: username }

    firewalls:
        admin_area:
            pattern:    ^/admin
            anonymous: ~
            form_login:
                login_path:  /login
                check_path:  /login_check

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

そして、このルーティングを使用しました:

login_check:
    pattern:   /login_check
login:
    pattern:  /login
    defaults: { _controller: TestCompanyInternetBundle:Admin:login }

http://symfony.com/doc/current/book/security.html#using-a-traditional-login-formによると、login_check ルートのコントローラーを実装する必要はありません。それでも、Symfony は次のエラーを返します。

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

ここで私が何か間違ったことをした可能性がありますか?ログインページは、ドキュメントで使用されているものとほぼ同じです。エラーは次のページで発生します:http://localhost/SymfonyTest/web/app_dev.php/login_checkは、ログイン フォームを使用した後に送信されるページです。

4

3 に答える 3

3

http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

/login_checkファイアウォールの背後にあることを確認してください。

したがって、この例では、セキュリティで保護された領域に/ adminのプレフィックスを指定しているため、ログインチェックルートにもそのプレフィックスを付ける必要があります(例:/ admin / login_check)。

次に、check_path URL(/ login_checkなど)がフォームログインに使用しているファイアウォールの背後にあることを確認します(この例では、単一のファイアウォールが/ login_checkを含むすべてのURLと一致します)。/ login_checkがどのファイアウォールとも一致しない場合、パス「/login_check」のコントローラーが見つかりませんという例外が発生します。

構成例security.yml

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

    secured_area:
        pattern:    ^/
        form_login:
            login_path: /login
            check_path: /login_check
        logout:
            path:   /demo/secured/logout
            target: /demo/
        anonymous: ~

    ....

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
于 2012-06-21T16:06:49.727 に答える
1

FOSUserBundle を使用することをお勧めします。これが、やりたいことを実行する最も簡単な方法と思われるためです: FOSUserBundle

インストールは非常に簡単で、非常に短い時間でアプリを動作させることができます. 幸運を!

編集:

コントローラーの TestCompanyInternetBundle:Admin:login を投稿していただけますか? セキュリティコントローラーをまったく拡張しますか?

于 2012-06-04T13:40:54.640 に答える
0

security.yml も含める必要があります。以下があることを確認してください。

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

あなたのsecurity.ymlで。これはよくある落とし穴です。

于 2012-06-07T00:21:53.907 に答える