ショップの顧客や管理画面のユーザーがログインした時に何かプログラムを実行したいというケースがあります。例えば情報をデータベースに記録するなどですね。

通常のPHPプログラムであればユーザーの情報をセッションに保存して、その次の行で何か実行すれば良いだけなんですが、フレームワークは一味違います。

 

EC-CUBE3ではSymfony2を基盤フレームワークとしていますので、ユーザー認証周りはSymfonyの流儀に従います。

まずは管理画面にログインした時のことを書きますが、ショップ側のログインもほぼ同様です。

 

/src/Eccube/Application.php

まず、ログイン周りを管理しているinitSecurityメソッドをみます。

 

上はログインフォームのURLやログイン後のリダイレクトを設定している既存のコードです。

この次に下記のコードを書き足します。

管理画面でのログインに対して、AuthencationSuccessHandlerを登録しています。

これでユーザーが管理画面でログインをすると\Eccube\Security\DefaultAuthenticationSuccessHandlerクラスのonAuthenticationSuccessメソッドが自動的に呼ばれるようになります。

\Eccube\Security\DefaultAuthenticationSuccessHandlerは以下のような内容でクラスを新規作成しておきます。

/src/Eccube/Security/DefaultAuthenticationSuccessHandler.php

 

あとはログイン後に実行したいプログラムをonAuthenticationSuccessメソッド内に書いてやるだけです。

上のサンプルだとログファイルにログインユーザーのIDが記録されます。

なお、ほぼ同様の方法で、ログインに失敗した時の記録やショップ会員のログイン成功/失敗記録も可能です

かなり高難易度のカスタマイズになりますが、EC-CUBE3をご利用の方はぜひお試しください。