2017-07-10 20 views
0

FOSUserBundleを使用する場合、認証(ユーザ+パスワード)がSymfony 2.8でどのように処理されるのかを理解しようとしています。セットアップに問題はなく、すべて正常に動作していますが、動作するかどうか理解したいだけです。symfony/FOSUserBundle認証の理解 - fos_user_security_checkの処理方法

FOSUserBunde\Resources\config\routing\security.xmlで定義されているfos_user_security_checkルート(/login_check)へのログインフォームポストのユーザー名+パスワード:

<route id="fos_user_security_check" path="/login_check" methods="POST"> 
    <default key="_controller">FOSUserBundle:Security:check</default> 
</route> 

のでFOSUserBundle:Security:checkアクションが要求を処理する責任を負っています。

public function checkAction() { 
    throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.'); 
} 

だから私は/app/config/security.ymlで、ファイアウォールの設定を見て:しかし、実装は次のようになり

security: 
    ... 
    firewalls: 
     ... 
     main: 
      ... 

      form_login: 
       provider: fos_userbundle 
       csrf_provider: security.csrf.token_manager 
       login_path: fos_user_security_login 
       check_path: fos_user_security_check 

ここcheck_pathfos_user_security_checkにreferes ...だから、認証が実際にhandeledされた場合?

+0

なぜ投票が下りましたか?質問に何か問題がある場合は、コメントを残して、私がより良くできることを教えてください。何が間違っているかについてのヒントなしに私は投票を下すことは非常に完全ではありません。感謝! –

答えて

2

認証はFOSUserBundle内では処理されません。データベースからユーザを取得する方法については、いくつかの基本パラメータとプロバイダを提供するだけです(fos_userbundle)。

認証の失敗と成功に何が起きるかについては、基本についてはSymfony\Component\Security\Http\Firewall\AbstractAuthenticationListenerを参照してください。 Symfony\Component\Security\Http\Firewall\UsernamePasswordFormAuthenticationListenerとその中のattemptAuthentication()メソッドを見て、authenticate()を呼び出す認証マネージャーサービスに従ってください。

あなたは最終的にSymfony\Component\Security\Core\Encoder\UserPasswordEncoderに取得し、あなたが持っているものは何でもエンコーダチェックisPasswordValid()機能は、(おそらくSymfony\Component\Security\Core\Encoder\BCryptPasswordEncoder)最終的にはPHPのpassword_verify関数を呼び出しています。

コントローラアクションが自分のやり方で見える理由は、login_checkを直接呼び出すべきではないということです。したがって、そこにいると、何かが誤って構成されているため、例外がスローされます。詳細については、ドキュメントのcheck_path変数とthis Stackoverflow answerを参照してください。

関連する問題