Symfony3の認証処理を解析
Symfonyのお作法では、security.ymlでHttpFirewall(認証設定)を定義することができる。
Symofny解析
まずはKernel::handle()で、handleRaw()が実行される。
認証失敗時は、AccessDeniedException が発生してL79で、ログイン画面へリダイレクト。
- AccessDeniedExceptionをthrowするbacktrace
- 認証失敗時のリダイレクト処理詳細
の詳細は、後で後述。
上記のhandleRaw()の中身はこちら。
KernelEvents::REQUESTのイベントリスナーが発火する
つまり、
KernelEvents::REQUESTをリッスンして、AccessDeniedExceptionをthrowすれば、
security.ymlを使わなくても認証処理は実現可能ではある。(とは言え、sessionの処理など諸々あるのでsecurity.ymlに任せるのがベスト)
認証イベントリスナーの処理の流れ
AccessDeniedExceptionがthrowされる
AccessDeniedExceptionをthrowするbacktrace
認証失敗時のリダイレクト処理詳細
L227でイベントリスナーが発火して、$eventにリダイレクト先のResponseがセットされる。
イベントリスナーはこんな感じ。
これは管理画面ログイン用のイベントリスナーなのでただのサンプル。
カスタムする際は独自のイベントリスナーを用意すること。