ログインチェックをプラグインにて行う

今回は、会員サイト等でよく使うログイン状態チェックを、
プラグインで実現するためのクラスを作りました。

ログイン状態チェックは、ログイン画面以外では必ず必要で、
しかも通常の処理(データ登録、参照等)とは関連しないので、
プラグインにするのに、うってつけだと思ったのです。
サンプルソースは以下になります。

Zend_Loader::loadClass('Zend_Controller_Plugin_Abstract');
Zend_Loader::loadClass('Zend_Session');
Zend_Loader::loadClass('Zend_Controller_Action_Helper_Redirector');

require_once('models/authModel.php');

class Zend_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
 public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
 {
   Zend_Session::start();

   $auth = new authModel();

   $controller = $request->getControllerName();
   $action   = $request->getActionName();

   if (($controller == 'index') && ($action == 'index'))
   {
    // ログイン画面の場合は、認証情報削除
    $auth->logout();
   }else{
    if (!$auth->isAuth()){
     // 認証エラーの場合は、認証情報を削除し、ログイン画面へ
     $auth->logout();
     $helper = new Zend_Controller_Action_Helper_Redirector();
     $helper->gotoUrl('/');
    }
   }
 }
}

この例では、http://test.com/にログイン画面があることを想定しています。
そのため、コントローラー名、アクション名がindexの場合は、
一旦、保持しているログイン状態を破棄しています。

今回は、DBデータに問い合わせる方法で、ログイン認証を行い、
ログインOKの場合は、ログイン情報(login_id等)を
セッションに保持するというサンプルソースを作りました。
そのため、このプラグインの中で、Zend_Session::start()も実行しています。

authModelは、認証系の処理を集めたモデルクラスです。
これについては、また後日サンプルソースを公開します。