web-dev-qa-db-ja.com

デフォルトのコントローラー/アクションなしでログインcheck_pathルートはどのように機能しますか?

私は次のルーティングコードを持つsymfony 2.3プロジェクトに取り組んでいます

just2_frontend_logincheck:
    pattern:   /login_check

持っていない

defaults:{ _controller: testBundle:User:login }

しかし、それは機能しています。しかし、ルーティングがどのように機能しているかはわかりません。出来ますか?ルーティングについてアドバイスしてください。

28
saravanan

check_pathルート/パスは、ログイン要求をキャッチするためにファイアウォールによって使用されます。

このルートのアクションは実際にはアクセスされません。ログインフォームが投稿するルート/ URLであり、リクエストはファイアウォールのプロバイダーサービスで処理する必要があります。

_check_path_ルートのアクションが実行されている場合、ファイアウォールに何らかの問題があります(要求はファイアウォールによって処理されません)。

here FOSUserBundleのcheck_pathは_SecurityController::checkAction_にルーティングされ、RuntimeExceptionをスローするだけです。

Check_pathの構成は、_app/config/security.yml_の下の_security.firewalls.<firewallname>.form_login.check_path_にあります。

それは_/login_check_のようなパターンか、あなたの場合のようにルート名、つまり_just2_frontend_logincheck_のいずれかですが、根本的なアクションはありません。

_security:
    providers:
         your_provider_name: your_provider_service  # authentication provider
         # ...

    firewalls:                                 # Required
        your_firewall_name:
            # ...

            provider: your_provider_name
            form_login:              
                check_path: /login_check       # submit the login form here
                                               # in your case a route name:
                                               # just2_frontend_logincheck
_

内部では、symfonyはサービス_your_provider_service_のauthenticate()メソッドを呼び出して、提供されたクレデンシャルを確認します。

次を使用して、プロバイダーサービスとして使用されるクラスを見つけることができます。

_app/console debug:container --show-private your_provider_service 
_
46