PEAR::Authで、任意の情報をユーザ追加時に認証テーブルに書き込んだり、引き出したりしたい
PEAR::Authモジュールでは、ユーザー認証につかうテーブル(id,とhash化されたpassを格納する。idはプライマリキーである必要がある)に対して、任意のカラムを付与してあげて、その情報を認証クラスから引き出してあげたりすることができます。
例えば、PEAR::Authで使う認証テーブルと、会員を格納するメンバーテーブルがあったとして、認証テーブルにメンバーテーブルのプライマリーキーをいれておいて、誰がログインしているのか、PEAR::Authから使う場合などです。
やり方として、
- PEAR::Authを継承する自前実装クラスにて
大体サブクラスをつくってPEAR使うと思うので、そこらへんの説明はオミットしてしまって
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等してしまってユーザー情報をとりだしてもいいかもしれません。
- ただし、なんでかんでもセッションにいれるのは個人的にはおすすめしません。
- 取り出すときは、このやりかたでもいいですが、上の方法で結合先のエンティティPKがはいっているのだからOUTER JOIN等してしまってユーザー情報をとりだしてもいいかもしれません。
//上のサブクラスのインスタンスをつくる
$_myLogin =& new myLoginClass();
//こんなかんじでgetAuthDataというメソッドからカラム名指定でとれますよ
$_user_data = $_myLogin->getAuthData("任意の追加カラム名");