@seo-maru  2021/08/03更新

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がセットされる。

イベントリスナーはこんな感じ。
これは管理画面ログイン用のイベントリスナーなのでただのサンプル。
カスタムする際は独自のイベントリスナーを用意すること。

タイトルとURLをコピーしました