Pear::Auth+MDB2でセッション認証
必要な環境:CentOS+PHP + PostgreSQL (MySQL) + Pear::MDB2 + Pear::Auth
1.まずPear::Authのインストール
| # pear install Auth |
*pear自体はインストール済みとする
2.mkpasswdコマンドのインストール
CentOSではデフォルトでmkpasswdコマンドはインストールされていない
| # yum install expect |
3.ユーザー認証用パスワード生成(デフォルトの長さは9文字だがここでは7文字とした)
| # mkpasswd -l 7 cCQj53@ |
4.これをMD5でハッシュ。MDB2とおなじMD5にしておかないとMD5関数(PHP)で求めるハッシュ値とMySQLのmd5関数で求める値が異なる場合などで、認証エラーとなる。
perlを使ってmd5を求める場合
| # perl -MDigest::MD5 -e 'printf "{DIGEST-MD5}%s\n", Digest::MD5::md5_hex("cCQj53@")' {DIGEST-MD5}7cb71b587418baa134a3baa0647f9308 |
phpコマンドラインからmd5を求める場合・・・こっちのが楽って・・・
| # php -r 'echo md5("cCQj53@");' 7cb71b587418baa134a3baa0647f9308 |
5.DBにユーザー認証用テーブルの作成
| create table ausers ( name varchar (32) primary key, passwd varchar (32) ); grant all on ausers to DBユーザー; insert into ausers(name,passwd) values ('認証したいユーザーのID','7cb71b587418baa134a3baa0647f9308'); |
6.認証用のソース(ここではpgsqlを指定しているがMySQlならmysqlとする)
| require_once ("Auth/Auth.php"); $options = array( "dsn" => "pgsql://user_name:password@host_name/db_name", // PEAR::MDB2参照 "table" => "ausers", // テーブル名 "usernamecol" => "name", // ユーザー名カラム "passwordcol" => "passwd", // パスワードカラム ); $auth = new Auth("MDB2", $options); $auth->setExpire(300); // set timeout to 5min $auth->setFailedLoginCallback ("raise_Error"); // ログインエラーのときの処理 $auth->start(); // ログイン画面を表示(Authのデフォルト画面) if($auth->getAuth()){ print $auth->getUsername(); print "さんがログインしました<br />"; } exit(); function raise_Error(){ print <<<ERR_MES login failed<br> ERR_MES; } ?> |
オリジナルのログイン画面を表示したい場合は、Authインスタンス生成時、第3パラメータにログイン画面表示用コールバック関数を書く。
| $auth = new Auth("MDB2", $options, 'func_name'); : function func_name($username, $status){ ログイン画面の表示処理 } |
実際に、成功、失敗の両方で試してみる。ログイン後のコールバック関数では、フォーム入力値のサニタイズをお忘れなく。
次は、Smartyと組み合わせて作ってみよう。
コメント