Auth の 継承による独自認証フォーム[Pear::Auth]
Pear の Auth はユーザー認証や認証用のフォームを作成することまでできますが、 独自の認証フォームを使用することもできます。 ここでは、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という配列を作成します。