mabots' blog

知のレバレッジを最大化せよ (旧はてなダイアリーから移転しました。)

PEAR::Authで、任意の情報をユーザ追加時に認証テーブルに書き込んだり、引き出したりしたい

PEAR::Authモジュールでは、ユーザー認証につかうテーブル(id,とhash化されたpassを格納する。idはプライマリキーである必要がある)に対して、任意のカラムを付与してあげて、その情報を認証クラスから引き出してあげたりすることができます。

例えば、PEAR::Authで使う認証テーブルと、会員を格納するメンバーテーブルがあったとして、認証テーブルにメンバーテーブルのプライマリーキーをいれておいて、誰がログインしているのか、PEAR::Authから使う場合などです。

やり方として、

  • PEAR::Authを継承する自前実装クラスにて

大体サブクラスをつくってPEAR使うと思うので、そこらへんの説明はオミットしてしまって

    • DB利用を前提
    • コンストラクタでDB Fieldsを指定する
    • コンストラクタ、と、メンバーを追加するものをこのクラスには実装するものとする
    • 予めDBはつくっておいてください。 |IDが入るカラム|PASSWORDが入るカラム|任意の追加カラム|


class myLoginClass extends Auth{

public function __construct () { //コンストラク
$this->_params = array(
"dsn"=>$DB_DSN,
"table"=>"認証テーブル名",
"usernamecol"=>"IDが入るカラム名",
"passwordcol"=>"PASSWORDが入るカラム名",
"db_fields"=>"*" //こうすることで、当該認証テーブルの任意のカラムが使えるようになる
);

$this->_auth = parent::Auth("DB",$this->_params,"loginFunction"); //認証スタート。このへんはAuthの使い方を参照
}



public function createUser ($id,$pass,$value) { //今回はユーザ追加するときに、任意の値である$valueというのを渡してあげるとことにする。
parent::addUser($id,$pass,array("任意の追加カラム名"=>$value));
}


  • おのおのプログラムコードで
    • 取り出すときは、このやりかたでもいいですが、上の方法で結合先のエンティティPKがはいっているのだからOUTER JOIN等してしまってユーザー情報をとりだしてもいいかもしれません。
      • ただし、なんでかんでもセッションにいれるのは個人的にはおすすめしません。

//上のサブクラスのインスタンスをつくる
$_myLogin =& new myLoginClass();
//こんなかんじでgetAuthDataというメソッドからカラム名指定でとれますよ
$_user_data = $_myLogin->getAuthData("任意の追加カラム名");