2017-09-18 6 views
1

ログインプロセスの前に/ログインプロセスの開始時にいくつかのアクションを実行する必要があります。事前ログインイベントはありますか、それをどのように実装できますか?Symfony - 事前ログインイベントリスナー

私はSymfony3を使用していますが、私はフォームログインとOAuthログイン(HWIOAuthBundle)を持っています。

thisを試しましたが、OAuthログインでは機能しません。または、OAuthログイン用に実装するにはどうすればよいですか?

答えて

2

symfonyのすべてのログイン情報は、ほとんどの場合symphonyセキュリティコンポーネントのリスナーFirewall内のkernel.requestイベントのリスナーによって実行されます。私はまだHWIOAuthBundleバンドルを使用していませんでしたが、Symfony Securityコンポーネントを使用しているようです。

ログイン/認証が行われる前に特定のアクションを実行するだけの場合は、リスナーよりも高い優先度を持つkernel.requestにイベントリスナーを登録する必要があります。

これは、Symfonyのドキュメント(Events and Event Listeners)の説明に従って行うことができます。まずsrc/AppBundle/EventListener/YourListener.phpであなたのイベントリスナクラスを作成します。

namespace AppBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 

class YourListener 
{ 
    public function onKernelRequest(GetResponseEvent $event) 
    { 
     // do stuff 
    } 
} 

次に、あなたのapp/config/services.ymlファイルにあなたのサービスを登録:this pageによると、ファイアウォールはだからあなたのイベントリスナーの優先順位を8の優先権を持っている

services: 
    AppBundle\EventListener\YourListener: 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, priority: 9 } 

ログインが行われる前に実行されるよりも高いはずです(私は上記の例で9を使用しました)。

+0

これは私の問題を解決するかもしれませんが、認証前に実行するにはどうしたらいいですか?今はすべてのリクエストで実行されています。 – mikecpl

+0

'Firewall'リスナーは、すべての要求に対しても実行されます。あなたは正確に何をしようとしていますか(ログイン前に実行するアクションは何ですか?) –

+0

ログインしていないユーザーについて、セッションIDを使っていくつかのアクションを記録します。これらのレコードをログに記録したいのですが、認証後にセッションIDが変更されるという問題があります。 – mikecpl