PearのAuthを使った認証システムを作りたいのですが仕組みがさっぱり分かりません。


希望のログインシステムは
・基本認証タイプではなくフォームタイプの物でログインが可能
・一般的なクッキーとセッションIDを組み合わせログインを維持
・ディレクトリに関係なく指定したPHPファイルであればどの位置でもブロック可能。
・できればユーザーを認識でき同じ会員でもAが進めない領域でもBは進めるようにしたい。

などです。このようなシステムをPearのAuthで構成することは可能でしょうか?又、メンバ(Auth::logout()のようなもの)とはどのように使うのですか?

ちなみに私はPHPに関しては知識がなくPerlに関して初心者レベルの知識しかありません。が、作ろうと思っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:jouno No.1

回答回数280ベストアンサー獲得回数0

ポイント25pt

デフォルトではそういう動作になっています。

こちらのチュートリアルをご覧ください。

http://dozo.matrix.jp/pear/index.php/PEAR/Auth.html

PEAR::Auth ユーザー認証 - PHP::PEAR - dozo PukiWiki

こちらと、

こちらもどうぞ。

全般的なヘルプはこちら。

メンバというのはクラスのメンバー関数のことでしょうか。単純にオブジェクトのメソッドのことだと理解していいんじゃないでしょうか。

日本語マニュアルにまだ入っていない機能はこちらに英語であります。ユーザー別に認証をわける場合、少数なら個別にユーザー名で場合わけすればいいですが、多人数の場合はそうもいかないので、認証レベルというか認証グループ情報をユーザーごとに設定して、getAuthDataで取得して場合わけ、という感じだと思います。


具体的にはここで

getAuthDataをつかってemail情報を取得している部分がグループ分けの参考になると思います。

id:esecua

回答ありがとうございました。実は出してもらったリンクすべて既見でした。

できればリンク集ではなく回答が欲しかったです。

ありがとうございました。

2005/11/18 20:06:50
id:jouno No.2

回答回数280ベストアンサー獲得回数0

ポイント25pt

http://www.hatena.ne.jp/1132304878#

人力検索はてな - PearのAuthを使った認証システムを作りたいのですが仕組みがさっぱり分かりません。 希望のログインシステムは ・基本認証タイプではなくフォームタイプの物でログインが可..

bnoteや本家の「導入」のチュートリアルは十分にわかりやすいので、あれ以上きちんと説明できる自信はないのですが、いちおう。


<?php


require_once(”Auth/Auth.php”);


// Authオプション

$params = array(

’dsn’=>”mysql://username:password@localhost/database”,

’table’=>”usermng”, // テーブル名

’usernamecol’=>”username”, // ユーザ名の列名

’passwordcol’=>”password”, // パスワードの列名

’cryptType’=>”md5”, // パスワードの暗号化形式

);


$objAuth = new Auth(”DB”, $params);


// ユーザーの追加

if($objAuth->addUser(’user’,’pass’)) {

echo ”ユーザーを追加しました。”;

}


?>


まず、require_once(”Auth/Auth.php”);

でパッケージを導入してauthの機能が使えるようにします。

つぎに、$objAuth = new Auth(”DB”, $params); 

では、Authオブジェクトを初期化しています。

この場合は、認証でつかう情報がmysqlデータベースに格納されているので、そのデータベースの場所と、データのユーザー名とパスワードが格納している項目名を指定しています。

$objAuth->addUser(’user’,’pass’)

ではユーザーとパスワードを追加しています。

この部分は、当然ですが、すべてのファイルで行うのではなく、一回だけ、あらかじめやっておく部分です。


なお、念のため、perlにもオブジェクト指向はありますが、この書き方はAuthクラスのインスタンスである$objAuthのメソッドであるadduserを実行するという意味です。この、メソッドというのが、クラスのメンバでもあります。要するに、オブジェクトに属する関数のことです。


パスワード以外の情報もデータベースに格納したいときは、

$useropts = array(’email’=>’hoge@hoge.com’);

$objAuth->addUser(’user’,’pass’,$useropts);

みたいにします。


そうすると、データベースに、ユーザー名、パスワード、emailの情報が格納されるわけです。

で、あとで認証するとき、スクリプトはこのデータベースを見に行って、一致するかどうか確認するわけです。


実際の認証は

$objAuth->start();

と書くと、処理がその部分に来ると認証フォームの画面になります。

で、認証画面から戻ってきても、これだけでは普通に画面が表示されます。


そこで、まず、$objAuth->getAuth()で認証に成功したかどうかを取得します。返り値がtrueなら成功なので、それで、if then elseで場合わけして、成功のときだけ以降を表示するように書くわけです。


具体的には、隠したいページすべてでまずgetAuthで場合わけして、認証されていない場合は、認証画面に飛ばす、という動作にしたりするわけです。


これら一連の過程でクッキーの発行やセッションIDの決定は勝手にやってくれます。こまかく設定したり調整したりはできますが、とくに必要がなければデフォルトでかまわないはずです。


ユーザーごとに処理を分けるためには、getAuthDataを使って、あらかじめデータベースに入れておいたデータを使います。この例ではemailを追加で入れておいたわけです。同様にして、group名を入れて、グループごとに処理をわけたりすればいい訳です。


私は回答数の関係でここまでですが、以降の回答者のために、できれば特にわからない点を書いていただけるとありがたいです。

id:esecua

詳細なるご回答ありがとうございました。

2005/11/21 20:42:14

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません