*Pearでユーザ認証(Auth) [#w2cb39db]

RIGHT:更新日&lastmod();  

**Authパッケージのインストール [#r1f997b9]

[[ここを見る>Web Memo/PukiWikiプラグイン(RSS)+PEAR]] 

**PHPサンプル [#d0ff9d41]
PearのAuthでユーザ認証を行い、その認証を別ページに継続する。また認証データベースはMysqlを使用する。MySQLではパスワードmd5でパスワードはハッシュした値を使用する。

''認証に利用できるストレージの種類''~
|ストレージの種類 |ストレージドライバ名 |
|データベース |DB |
|ファイル |File |
|SMBPasswd |SMBPasswd |
|IMAP |IMAP |
|LDAP |LDAP |
|POP3 |POP3 |
|RADIUS |RADIUS |
|SOAP |SOAP |
|vpopmail |vpopmail |
 
今回はMySQLなので''DB''を指定。

***データベースの用意 [#w090d75e]

''md5でハッシュ''~

 $ echo -n '*****' | md5sum
 ****************61d7************  -

DB名: authdb~
DBユーザ名: ism~
パスワード: ******~

  mysql> select * from t_auth;
 +----------+----------------------------------+
 | username | password                         |
 +----------+----------------------------------+
 | test     | ****************61d7************ |
 +----------+----------------------------------+
 1 row in set (0.00 sec)

***認証画面 [#e87b4c67]

Auth/Auth.php:Pearモジュールが入っているので必ず指定が必要

function loginFunction($username, $status):~
ログインフォームの書式指定。ない場合はデフォルトが表示される。

$params:この配列にデータベース、テーブル、先のログインフォームの要素の名前をクラスに渡す内容を記述

new Auth("DB", $params, "loginFunction");~
コンストラクタを使ってAuthクラスを作成。第1パラメータ=>ストレージドライバ名~
第2パラメータ=>先の配列。第3パラメータ=> 先のログインフォームの関数~

''pearauthtest1.php''

 <?php
 
 header("Content-type: text/html;charset=UTF-8");
 
 require_once "Auth/Auth.php";
 
 function loginFunction($username, $status){
 
     print("<form method=\"post\" action=\"pearauthtest1.php\">");
     print("<table>");
     print("<tr>");
     print("<td>ユーザー名</td>");
     print("<td><input type=\"text\" name=\"username\"></td>");
     print("</tr>");
     print("<tr>");
     print("<td>パスワード</td>");
     print("<td><input type=\"password\" name=\"password\"></td>");
     print("</tr>");
     print("<tr>");
     print("<td colspan=\"2\"><input type=\"submit\"></td>");
     print("</tr>");
     print("</table>");
     print("</form>");
 }
 
 $params = array(
     "dsn" => "mysqli://****:ism@192.168.30.16/authdb",
     "table" => "t_auth",
     "usernamecol" => "username",
     "passwordcol" => "password"
 );
 
 $authobj = new Auth("DB", $params, "loginFunction");
 
 $authobj->start();
 
 print("認証開始後、処理はすぐ次へ移り、この部分も表示されます <Br>");
  
 if ($authobj->getAuth()){
 
 //      header("Location:http://www2.data-map.net/~okada/pear/next.php");
       print("認証済みです <br>");
 
 
     echo "<a href=\"next.php\">次の画面</a> <br>";
 
 }else{
     print("認証されていません");
 }
 
 
 ?>

&color(red){''参考''};~
header("Location: &#x68;ttp://www2.data-map.net/~okada/pear/next.php");
は文字が表示される前のヘッダー部相当に記述されないと動作しない。

またheader("Content-type: text/html;charset=UTF-8");も<html>タグの前に必要


***認証後の画面 [#bafe85e5]

認証確認用共通部をまとめる

&color(red){コンストラクタを使ってAuthクラスを作成時第4パラメータにfalseを指定すると見認証時にログインフォームが表示されない.};

''authtest.php''

 <?php
 // 認証確認用ルーチン
 
 require_once "Auth/Auth.php";
 
 $params = array(
     "dsn" => "mysqli://ism:ism@192.168.30.16/authdb"
 );
 
 //第3パラメータは空白のときは内部定義すみのフォームを利用するので必要ない
 //また、すでに入力された内容はSession管理され、引き継がれるので前ページとおなように
 //認証チェックできる。 第4パラメータにfalseを指定すると見認証時にログインフォームが
 //表示されない
 
 $authobj = new Auth("DB", $params, "", false);
 
 $authobj->start();
 
 ?>

認証後のページ

''next.php''~
 <?php
   header("Content-type: text/html;charset=EUC-JP");
 ?>
 
 <html>
 <head>
 <title>PHP認証テスト</title>
 </head>
 <body>
 <?php
 require_once ("authtest.php");
 
 if (!$authobj->getAuth()){
         echo "認証されていません <Br>";
         exit;
 }
 ?>
 
 <H3>2ページ目</H3>
  
 認証すみ<Br>
 
 <a href="logout.php">Logout</a><Br>
 
 </body>
 </html>

***ログアウトページ [#xc4e8dd6]

''logout.php''

 <?php
   header("Content-type: text/html;charset=EUC-JP");
 ?>
 
 
 <html>
 <head>
 <title>Logout</title>
 </head>
 <body>
 <?php
 
 require_once ("authtest.php");
 
 if ($authobj->getAuth()){
         $authobj->logout();
         $_SESSION=array();//セッションを初期化*
    /*       セッションクッキーを無効にする         */
         if (isset($_COOKIE[session_name()])) {
 
//第3パラメータは有効範囲のパスを指定この場合は /以下すべて
             setcookie(session_name(), "", time()-42000, "/");
         }
 
         session_destroy();//セッションを破壊
         echo "ログアウトされました <br>";
 
 }else{
         echo "認証されてません <br>";
 
 }
 
 ?>
 
 <a href="pearauthtest1.php">Loginページへ</a><Br>

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS