今回は、会員サイト等でよく使うログイン状態チェックを、
プラグインで実現するためのクラスを作りました。
ログイン状態チェックは、ログイン画面以外では必ず必要で、
しかも通常の処理(データ登録、参照等)とは関連しないので、
プラグインにするのに、うってつけだと思ったのです。
サンプルソースは以下になります。
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は、認証系の処理を集めたモデルクラスです。
これについては、また後日サンプルソースを公開します。