REDLINE MAGAZINE | PEAR::Authで認証してみたいREDLINE MAGAZINEトップページへ

すべてのエントリを見る

PEAR::Authで認証してみたい

ログインとかログアウトとか、どういうやり方で実現するんだろうなーなんて思ってて、そういえばPEARの中にそういうのあったなーと。ということで、PEAR::Authを使ってみたい!

Manual :: Auth

PEAR自体は前になんか実験してた時にちょろっと使った事があったので、インストールどうこうはスルーで。ていうか、XAMPP使ってるのでAuthも元々インストール済だったかも。まずManual :: 使用例のページで導入についてを熟読・・・いざ真似してみる。

データベースを用意する

上記ページの例ではログインデータの検証にデータベースを使ってるので、こっちもデータベースの用意をする。

ちなみに私のデータベースの知識は「MySQL入門以前」という入門書を読んで、最後の「なんでもデータベースを作る」まで頑張った程度。(初めてMySQLやってみる人にはこの本かなりオススメ。)

ということで、まずデータベースの作成。データベースの名前は「AuthTest」にしてみた。

キャプチャ・データベースの作成

続いてそのデータベースを使ってテーブルの作成。名前は「auth」にした。ここから先はマニュアルとまったく同じ内容。usernameとpasswordのフィールドを作る。

キャプチャ・テーブル、フィールドの作成

パスワードの方はMD5形式でハッシュした値が入るので必ず32文字以上で、と。その件については下記のソース書いたファイル用意して値をゲット。

<?php
echo md5("test");
?>

最後にデータ(レコードっていうんだっけ)を1件分挿入。username「user1」password「test(をMD5形式にしたもの)」とか入れた。ちゃんと入ってるか確認。

キャプチャ・データの挿入

これで下準備完了。何かの本かサイトでこういうのって接続用のユーザーを作ったほうがいいって見たことある気もするけど、気がするだけかもしれないので、とりあえずスルー。

マニュアルのソース真似っこする

まずAuth.phpをインクルード。で、次にログインフォームを表示する関数を定義。データベースを使用するので、 変数$dsnを作成。(PEAR::DB のデータベース接続に使われるやつと一緒)

PEAR::Authでログインデータを扱えるストレージはいろいろ。(ストレージドライバ)今回はMySQLを使うのでDBを指定。

で、それらを使ってAuthクラスのオブジェクトを作るという流れっぽい。

$a = new Auth("ストレージコンテナ名", ストレージコンテナのドライバへのコネクション, "ログインフォーム用のユーザー定義関数");

とりあえずマニュアルのソース、2パターン両方試してみた。それぞれ自分の環境に合わせて変更・・・テスト・・・うまくいった!ヽ(´ー`)ノ

Authのメンバー関数

オブジェクトを作ったときに実行されるメソッドの事、メンバー関数(メンバ?)って言うんだよね。違ってたらすいません。(いや、でもなんかコンストラクタと何が違うのかは分からない。その辺り頭の中でごじゃごじゃしてるなぁ)

Auth() コンストラクタ
Auth::start() 認証を開始する
Auth::logout() 認証済みのユーザをログアウトさせる
Auth::addUser() 新しいユーザを追加する
Auth::changePassword() ユーザのパスワードを変更する
Auth::removeUser() ユーザアカウントを削除する
Auth::getAuth() ユーザが認証済みかどうか調べる
Auth::listUsers() ユーザの一覧を取得する
Auth::getUsername() 認証済みユーザのユーザ名を取得する
Auth::checkAuth() 有効な認証情報を持つセッションが存在するかどうかを調べる
Auth::getStatus() 認証セッションの現在の状況を取得する
Auth::setExpire() 認証有効期限を設定する
Auth::setIdle() 最大アイドル時間を設定する
Auth::sessionValidThru() セッションの有効期限を取得する
Auth::getAuthData() 認証セッション内に保存された追加情報を取得する
Auth::setAuthData() 認証セッションの追加情報を保存する
Auth::setAllowLogin() ユーザがログイン可能かどうかを制御する。デフォルトではオンになっている
Auth::setAuth() 特定のユーザをログイン済みとして扱う
Auth::setShowLogin() ログインフォームが表示されるかどうかを制御する。デフォルトは「表示される」
Auth::setCheckAuthCallback() セッションが有効かどうかを調べる際に実行されるコールバックを設定する
Auth::setLoginCallback() ログインに成功した際のコールバックを設定する
Auth::setLogoutCallback() ログアウトに成功した際のコールバックを設定する
Auth::setFailedLoginCallback() ログインに失敗した際のコールバックを設定する
Auth::setSessionName() Auth セッション変数に独自の名前を設定する
Auth::setAdvancedSecurity() 高度なセキュリティ機能を有効にする。デフォルトでは無効となっている
Auth::attachLogObserver() ログオブザーバのインスタンスを、内部の Log オブジェクトにアタッチする

上の表は自分が意味分かる順番に並べた。最後の方は今の私の頭ではマニュアル読んでも意味わかんない。

ログアウトしたい

今回コレを試してみたいと思ったのはログアウトもできたらいいなーという意味もありました。「認証って言われたら.htaccess使ってベーシック認証」と頭の中で直結するくらいしか認証に関する知識ないんですが、ベーシック認証ってログアウトできないなーと。やっぱログインしたらログアウトもセットにしたいーということでPEAR::Authを使えばログアウトもできるよ!というのも試してみます。

ソースは概ねマニュアルどおりなのだけれど。

キャプチャ・ログイン・ログアウトの流れ

「こんにちわ○○さん」もしてみたい!

webサービスなんかでログインしたら名前出るじゃないですか。こんにちわ○○さんとか。アレ、やりたい。ユーザー名を取得するのはgetUsername()。あと、上のソースだとユーザー名やパスワードが間違ってる時、何もエラー文とか表示されないのでその辺りも加えてみる。

キャプチャ・ログイン・ログアウトの流れ その2

loginFunctionの部分の引数は「三つの引数を受け取ります。それぞれ直近にログインを試みたユーザ名、認証状態、そして Auth オブジェクトです。」とのこと。認証状態を表すAuth の定数はマニュアルのこのページ

定数 状態
AUTH_IDLED -1 セッションのアイドル時間が所定の時間をこえている場合に返されます。
AUTH_EXPIRED -2 セッションが期限切れになった場合に返されます。
AUTH_WRONG_LOGIN -3 使用中の Auth コンテナが、与えられた ユーザ名/パスワード の組み合わせを有効だと判断できなかった場合に返されます。
AUTH_METHOD_NOT_SUPPORTED -4 使用中の Auth コンテナで、その関数が実装されていない場合に返されます。
AUTH_SECURITY_BREACH -5 高度なセキュリティチェックで問題が見つかった場合に返されます。
AUTH_CALLBACK_ABORT -6 コールバック関数がセッションを終了させた場合に返されます。

<< だから変数に入れてからループ回せって話 | PHPでよく使われてそうな変数名 >>

トラックバック

このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/225

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。