Auth の 継承による独自認証フォーム[Pear::Auth]

PearAuthは、ユーザー認証や認証用のフォームを作成することまでできますが、 独自の認証フォームを使用することもできます。 ここでは、Authの関数であるdrawLoginをオーバーライドして独自認証を行います。

<?php

require_once "Smarty.class.php";
require_once "Auth/Auth.php";

class ExAuth extends Auth
{
    var $_objSmarty;
    var $_tempSmarty;
    var $LOGIN_MESSAGE_VAR = "MSG";
    //コンストラクタ
    function ExAuth( $storageDriver,    //ストレージドライバ
        $objSmarty,  //Smartyオブジェクト(省略可)
        $tempSmarty,  //Smartyテンプレート名
        $options  = '',  //PEAR:Auth用オプション
        $loginFunction = '',  //PEAR:Auth用ログイン関数名
        $showLogin  = true)  //ログインがオプションかどうか
    {
        //Smarty関連の設定
        $this->objSmarty = $objSmarty;
        $this->tempSmarty = $tempSmarty;

        //基底クラスのコンストラクタを呼び出す
        $this->Auth($storageDriver, $options, $loginFunction, $showLogin);
    }

    //ログイン画面描写
    function drawLogin($username = '') {
        $this->_objSmarty->assign($this->LOGIN_MESSAGE_VAR,"ステータス等によるメッセージ");
        $this->_objSmarty->display($this->_tempSmarty);
    }
}

$objSmarty = new Smarty;

$smarty->template_dir = 'テンプレートのパス';
$smarty->compile_dir = 'コンパイルのパス';
$smarty->config_dir = 'コンフィグのパス';
$smarty->cache_dir = 'キャッシュのパス';

$tmp = "login.tpl";

// Authオプション
$params = array(
'dsn'=>"mysql://username:password@localhost/database",
'table'=>"usermng",                                    // テーブル名 
'usernamecol'=>"username",                             // ユーザ名の列名
'passwordcol'=>"password",                             // パスワードの列名
'cryptType'=>"md5",                                    // パスワードの暗号化形式
'db_Fields'=>"*",                                      // 他の項目の取得を可能にする
);

$objAuth = new Auth("DB", $objSmarty, $tmp, $params);

// 認証プロセスの開始
$objAuth->start();

if($objAuth->getAuth()) {
    echo "ようこそ!" . $objAuth->username . "さん<br>";
    // メールアドレスを取得。
    echo $objAuth->getAuthData('email');
}

?>

Authを継承して、フォームの出力部分であるdrawLoginをオーバーライドします。

コンストラクタには、Smartyのオブジェクトとテンプレートファイルを追加して渡すようにしています。 フォームのname属性は、usernameとpasswordの固定になりますので注意が必要です。

ログインの状態は、セッション情報に保持されます。 デフォルトでは、セッション内に_authsessionという配列を作成します。