AUTHのフォーム認証で認証されない原因がわかりません

このQ&Aのポイント
  • AUTHを使ってフォーム認証を試みていますが、AUTH_WRONG_LOGINが返ってきます。なぜ、認証されないのか原因が全くわかりません。
  • 認証フォームのコードに問題がないか確認していただければと思います。
  • 使用環境はPHP 5.1.6、Windows2000 PRO、Apache 2.0で、リモートサーバはMS SQL Server 2000を使用しています。
回答を見る
  • ベストアンサー

AUTHのフォーム認証で認証されない原因がわかりません

AUTHを使いフォーム認証を試みていますが、 AUTH_WRONG_LOGINが返ってきます。 なぜ、認証されないのか原因が全くわかりません。 (単純入力ミス、パスワードのmd5による暗証値等の登録ミスではありません。) 以下がコードですが、コードに不適当な個所があればご指摘いただければと思います。 また、コードに問題がないようであれば、原因として何が考えられるか助言 をいただければと思っています。 (1)認証フォーム <html> <head> <title>ログインページ</title> </head> <body> <form method="POST" action="<?php> print($_SERVER['PHP_SELF']) ?>"> <table border="0"> <tr> <th align="right">ユーザID:</th> <td><input type="text" name="username" size="15" maxlength="20" /></td> </tr> <tr> <th align="right">パスワード:</th> <td><input type="password" name="password" size="15" maxlength="20" /></td> </tr> <tr> <td colspan="2"> <input type="submit" value="ログイン" /> </td> </tr> </table> <font color="red"><?php print($err); ?></font> </form> </body> </html> (2)認証コード <?php function loginFunction($usr,$status){  switch($status){   case AUTH_IDLED :   case AUTH_EXPIRED :    $err='ログイン期限が切れています。再ログインしてください';break;   case AUTH_WRONG_LOGIN :    $err='ユーザID/パスワードが間違っています。';break;   case AUTH_METHOD_NOT_SUPPORTED :    $err='認証方法が未サポート';break;   }   require_once('loginForm.php');   }   $params=array(    'dsn'=>'uri:file://XXXXX\XXXX.dsn',    'table'=>'login', 'usernamecol'=>'username', 'passwordcol'=>'password', 'db_fields'=>'*'); $myAuth=new Auth('DB', $params, 'loginFunction'); $myAuth->start(); if(!$myAuth->getAuth()){ exit(); } ?> .htaccessを使用し、認証コードが逐次実行されるようにしています。 [PHP使用環境] PHP=5.1.6 OS=Windows2000 PRO webserver=apatch2.0 [DB環境(リモートサーバ)] DB=MS SQL Server2000 OS=Windows2003 server R2 説明不足等がありましたら、ご指摘ください。

  • PHP
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
noname#246547
noname#246547
回答No.2

'dsn'=>'uri:file://XXXXX\XXXX.dsn', ですが、 このデータベースバックエンドの指定はあっていますでしょうか? PEARマニュアルではサポートしていないようですが。 もしこのファイルを使って認証するならば、 odbc経由になるのかな? PEARは使ったことが無いため参考程度で!

参考URL:
http://peardoc.xole.net/package.database.db.intro-dsn.html
ojiboss
質問者

お礼

回答ありがとうございます。 ご指摘いただいたことがきっかけでdsnの内容を見直したところ 認証されました。原因はdsnの内容がPDOで使用したdsnのためでした。 単純ミスです。 ちなみに以下のコードのままでも認証されました。 'dsn'=>'uri:file://XXXXX\XXXX.dsn', ありがとうございました。

その他の回答 (1)

noname#26652
noname#26652
回答No.1

<form method="POST" action="<?php> print($_SERVER['PHP_SELF']) ?>"> この行は、正確にこの内容ですか? だとすると、'<?php'の直後にある'>'は不要ではありませんか? これが認証エラーの原因かどうかは、わかりません。

ojiboss
質問者

お礼

ほんとうにありがとうございました。 単純ミスでした。

ojiboss
質問者

補足

ご指摘のとおりです。 コードを修正しましたが、エラー原因ではないようです。

関連するQ&A

  • PEARでのAuth認証について

    ただいまPEAR入門を参考に勉強しているのですが 認証部分でつまずいてしまっています。 どなたか御教授いただけませんでしょうか。 簡単なログイン認証をするためにサンプル通りのコードを 作って表示テストを行うものなのですが 認証できたら「認証済みです」 できていなければ「ID/パスワードが違います」 と表示されるようなものです。 IDもパスワードもきちんと入れているのですが認証できないため 悩んでいます。 以下そのコードを書きますので助言いただけるとありがたいです。 *contents.php* <?php require_once("Auth.php"); function loginFunction($usr, $status){ require_once("loginForm.php"); } $params = array( "dsn" => "mysqli://pear:pass@localhost/pear", "table" => "auth", "usernamecol" => "username", "passwordcol" => "password"); $myAuth = new Auth("DB", $params, "loginFunction"); $myAuth -> start(); if($myAuth -> getAuth()){ print("認証済です。"); } ?> *loginForm.php* <?php switch($status){ case AUTH_IDLED : case AUTH_EXPIRED : $err = "ログイン期限が切れています。再ログインしてください。"; break; case AUTH_WRONG_LOGIN : $err = "ユーザID/パスワードが間違っています。"; break; } ?> <html> <head> <title>ログインページ</title> </head> <body> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <table border="0"> <tr> <th align="right">ユーザID:</th> <td><input type="text" name="username" size="15" maxlength="20"></td> </tr> <tr> <th align="right">パスワード:</th> <td><input type="password" name="password" size="15" maxlength="20"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="ログイン"> </td> </tr> </table> <font color="red"><?php print($err); ?></font> </form> </body> </html>

    • ベストアンサー
    • PHP
  • Auth認証エラー

    Auth認証をするとログインには成功するものの下記のようなエラーが出てしまいます。解決策はございませんでしょうか。ご教授願います。 Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /usr/local/php5/php/Auth.php on line 810 Warning: Cannot modify header information - headers already sent by (output started at /home/sites/heteml/*****/*/*/*/*****/****/*****/*****/index.php:8) in /usr/local/php5/php/Auth.php on line 838 ちなみにphpファイルは下記を実行しています。 <?php require_once("Auth/Auth.php"); function loginFunction($username, $status, $auth){ if ($status == AUTH_WRONG_LOGIN){ print("ユーザー名又はパスワードが間違っています<br>"); } print("<form method=\"post\" action=\"index.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://authuser:authpass@localhost/authdb", "table" => "authtable", "usernamecol" => "username", "passwordcol" => "password" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); if ($authobj->getAuth()){ echo 'ログイン済み'; }else{ echo '未ログイン'; } ?> 補足ですが、サーバーはヘテムルを使用しています。

    • ベストアンサー
    • PHP
  • PEAR auth で認証ができません

    PHP初心者で、PEAR Authによるsqliteを使用して認証のテストを行っています。 コード: <?php require_once "Auth.php"; function loginFunction() { echo "<form method=\"post\" action=\"test_auth.php\">"; echo "<input type=\"text\" name=\"username\">"; echo "<input type=\"password\" name=\"password\">"; echo "<input type=\"submit\">"; echo "</form>"; } $dsn = array( 'phptype' => 'sqlite', 'database' => 'test.sqlite', 'mode'=>'0644' ); $options = array( 'dsn' => $dsn, 'table'=>"schedule_usr", 'usernamecol'=>"username", 'passwordcol'=>"password" ); $a = new Auth("DB", $options, "loginFunction"); $a->start(); if ($a->checkAuth()) { print("認証しました。"); }else{ print("認証していません。")); } ?> エラーなどは表示されませんが、「認証しました」が表示されません。 test.sqliteではschedule_usrテーブルに username=test password=1111を 入力してあります。パスワードはmd5()で変換したものを入れてありますが、 「認証していません」が表示されてしまいます。 コード自体に問題があるのでしょうか? ご教示願います。

    • ベストアンサー
    • PHP
  • PEARのAuthを勉強中です

    OS:Fedora7 webサーバ:Apache2 言語:PHP5 +MySQL5、PEARのAuthでユーザー認証の勉強をしているのですが、文法以前の質問になると思います。 データベースに アクセス用のユーザー名・パスワード、認証用のユーザー名・パスワードをそれぞれ設定しました。 下記のコードをブラウザで表示しようとしても、真っ白な画面しか表示されません。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>ログインページ</title> </head> <body> <?php require_once("Auth/Auth.php"); function loginFunction($username, $status){ print("<form method=\"post\" action=\"pearauthtest2.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\" value=\"クエリ送信\"></td>"); print("</tr>"); print("</table>"); print("</form>"); } $params = array( "dsn" => "mysqli://authuser:authpass@localhost/kagaku", "table" => "auth", "usernamecol" => "username", "passwordcol" => "password" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); if ($authobj->getAuth()){ print("認証済みです"); }else{ print("認証されていません"); } ?> </body> </html> 入力フォームが表示されない理由がわかりません。phpinfo()でちゃんとPHPが動いているのは確認できています。 どなたかご教授願います。

    • 締切済み
    • PHP
  • 「PEAR::Auth認証」の結果による判別について

    現在、PEAR::Authを利用して認証処理を作成しております。 質問させていただきたい内容は、 AuthクラスのgetAuthメソッドについてです。 まず、Authクラスのインスタンスを生成し、 start()メソッドを実行して認証を行い、 その認証の結果をgetAuthメソッドによって 取得しております。 次に、getAuthメソッドにより得た結果を IF文で判別して、結果がTRUEの場合は処理を続行し、 結果がFALSEの場合はログイン画面に戻るように 制御しようとしたところ、 FALSEの場合の制御が思うように動作しませんでした。 以下に、ソースを記述いたします。 login_check.php ************************************************* <?php require_once("Auth/Auth.php"); $params = array( "dsn" => "pgsql://postgres:postgres@win/db", "table" => "test_table", "usernamecol" => "test_user", "passwordcol" => "test_passwd", "cryptType" => "none", ); // インスタンス生成 $auth = new Auth("DB", $params , "LoginFuntion"); // 認証開始 $auth->start(); // 結果を判別 if (!$auth->getAuth()) { // 結果がFALSEだったらログイン画面に戻る header("Location: ./login.php"); exit; } else { // 結果がTRUEであれば処理を続行 ・ ・ ・ } ?> $auth->getAuth()の使い方が違うのかも知れませんが、 Authのソースを見ても分かりませんでした。 どなたか、「PEAR::Auth認証」の結果による判別に ついてお教え下さい。。。 ※今回は、ログイン画面とチェックPHPを分けております。 ログイン画面はHTMLで、チェックPHPにAuthを利用しております。 この利用の仕方が既に間違っているのでしょうか? 併せてお教えいただければと思います。

    • 締切済み
    • PHP
  • PHP Auth認証ができない

    今日は。 PEARのAuthを使って認証ページを作ろうとしているのですが、下記エラーがでてきて困ってます。環境はウインドウズXPです Fatal error: Class 'Auth' not found in C:\Program Files\Apache Group\Apache2\htdocs\samples\practice\myauth.php on line 15 15行目のソースは $auth=new Auth("DB",$params,"loginFunction",TRUE);です Authが無いのかなと思い require_once("Auth/Auth.php"); でエラーがでているか調べたのですが、エラーはでてないようです。 また、Authフォルダがあるかどうかも調べたのですが、C:\php\PEARにありました Fatal error: Class 'Auth' not foundをグーグルで調べてもよくわからないので困っています。 何かアドバイスがあればよろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR::AUTHにて情報の引き継ぎ

    初心者のため、幼稚な質問で大変申し訳ないです。 PEAR::Authにて認証ページを作っています。 login.php <?php require_once "Auth/Auth.php"; $params=array( "dsn" => "DB情報", "table" => "user", "usernamecol" => "username", "passwordcol" => "password", 'cryptType'=>"md5", 'db_Fields'=>"*" ); $objAuth = new Auth("DB", $params); $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "としてログインしています。<br>"; echo "<a href=\"authtest.php\">テストページ</a><br>"; } ?> といった情報で、正常にログイン認証出来ています。また、$objAuth->usernameこの情報も正常に取れています。 次のテストページ(authtest.php)に飛んだ時に、 authtest.php <?php require_once "Auth/Auth.php"; $params=array( "dsn" => "DB情報", "table" => "user", "usernamecol" => "username", "passwordcol" => "password", 'cryptType'=>"md5", 'db_Fields'=>"*" ); $objAuth = new Auth("DB", $params); $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "としてログインしています。<br>"; } ?> となっており、ログイン状態は続いていますが、$objAuth->usernameこれが取得出来ていません。 「としてログインしています。」 そもそもページが遷移してしまうと、このようなパラメータは取得出来ないのでしょうか? それとも記述に間違いがあるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PEAR::AUTHのリロード問題

    題名の通りPEARのAUTHを使ってユーザー認証を実装しようとしています.以下のように処理をすると 1AUTHオブジェクトの作成 2ログインフォームの表示(start()) 3POSTで受け取った$logoutが1の時ログアウト処理(logout()) 4POSTで受け取った$logoutが1の時ログインフォームの表示(start()) 5ログアウトボタン押したときに自ファイルにPOSTで$logout=1送信 ログアウトボタンを押してログアウトしたのちリロードをするとログインフォームが2個表示されてしまいます.どなたか解決方法やヒントを教えてください.説明が下手ですみません.以下がソースです. <? //roading library require_once("Pager/Pager.php"); require_once("Auth/Auth.php"); // user sertification if ($status == AUTH_WRONG_LOGIN){ print("ユーザー名またはパスワードが間違っています."); } print("status= $status"); function loginFunction($username,$status){ print("<form method='POST' action='diary.php'>"); print("username: <input type='text' name='username' size='15'>"); print("password: <input type='password' name='password' size='15'>"); print("<input type='submit' value='Login'>"); print("</form>"); } print("status after= $status"); $params = array( "dsn" => "mysqli://**:**@localhost/**" , "table" => "auth" , "usernamecol" => "username" , "passwordcol" => "password" ); $authobj = new Auth("DB" , $params , "loginFunction"); print("first start<br>"); $authobj->start(); //logout $logout=0; $logout = $_POST['logout']; print("logout= $logout <br>"); if($logout == 1 ){ print("in if<br>"); $authobj -> logout(); print("ifin= $ifin"); $ifin = 1; print("ifin after = $ifin"); } if ($authobj->getAuth()){ ...< 省略>... $logoutBtn .="<right><form method='POST' action='diary.php'><input type='hidden' name='logout' value='1'><input type='submit' value='ログアウト'></form></right><br><br>"; }else{ print("ログインしてください"); } ?> <html> <head> <title>システム</tilte> </head> <body> <h2><i>システム</i></h2><?= $logoutBtn ?> <?= $login ?> 【ステータス】 <table width="400" border="1"> <tr bgcolor="4cbd59" align="center"><td>総研究時間(分)</td><td>JABEE判定</td><td>登録件数</td></tr> <tr align="center"><td><?= $sum ?></td> <?= $jbtemp ?> </td><td><?= $msg ?></td></tr> </table> <br> 【操作】<br> <button type="button" onclick="location.href='insert.php'">作業追加</button> ソート(キー:開始時間)<button type="button" onclick="location.href='diary.php?srt=1'">昇順</button><button type="button" onclick="location.href='diary.php?srt=0'">降順</button> <br><br><form method="POST" action="csv.php"><input type="hidden" value="csv" name="csv"><input type="hidden" value="<?= $srt?>" name="srt"><input type="submit" value="CSVダウンロード"></form><br> 【作業一覧】<br> <?= $naviTempHtml?> <br> *作業内容内は改行禁止!! <table border="1" height="50px"> <tr bgcolor="4cbd59"><td>id</td><td>開始時間</td><td>終了時間</td><td>研究時間</td><td>活動場所</td><td width="100">作業者</td><td width="300">作業内容</td><td>変更</td><td>削除</td></tr> <?= $tempHtml?> </table> <br> <?= $naviTempHtml?> </body> </html>

    • ベストアンサー
    • PHP
  • Fedora Apache Mysql PHP

    今回はじめてLinux系のカテゴリで質問させてもらいます。(PHPのカテでも同じ質問をしましたが、こちらのカテの方が合っているかと思いました。) OS:Fedora7 webサーバ:Apache2 言語:PHP5 +MySQL5、PEARのAuthでユーザー認証の勉強をしているのですが、文法以前の質問になると思います。 データベースに アクセス用のユーザー名・パスワード、認証用のユーザー名・パスワードをそれぞれ設定しました。 下記のコードをブラウザで表示しようとしても、真っ白な画面しか表示されません。このpeartest.phpファイルは /var/www/html に置かれています。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>ログインページ</title> </head> <body> <?php require_once("Auth/Auth.php"); function loginFunction($username, $status){ print("<form method=\"post\" action=\"pearauthtest2.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\" value=\"クエリ送信\"></td>"); print("</tr>"); print("</table>"); print("</form>"); } $params = array( "dsn" => "mysqli://authuser:authpass@localhost/kagaku", "table" => "auth", "usernamecol" => "username", "passwordcol" => "password" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); if ($authobj->getAuth()){ print("認証済みです"); }else{ print("認証されていません"); } ?> </body> </html> 入力フォームが表示されない理由がわかりません。phpinfo()でちゃんとPHPが動いているのは確認できています。 どなたかご教授願います。

  • 認証について

    下記、認証画面を作成しましたが、 「kokousr」DBに存在しないUSERID,USERPASSを入力しても、ログインできてしまいます。 存在しないUSERをログインさせないためには、どこを変更すればよろしいのでしょうか? よろしくお願いします。 <?php function chk_auth() { global $conn; global $uid; global $upass; if ($uid and $upass) { $sql = "SELECT * FROM kokousr where uid = '".cnv_sqlstr($uid)."'" ." and pass = '".cnv_sqlstr($upass)."'"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); if (mysql_num_rows($res) >= 1) { return TRUE; } else { return FALSE; } } else { return FALSE; } } function gamen_log() { ?> <h2>ログイン画面</h2> <form method="post" action="./itiran.php"> <table border="1"> <tr> <td>ユーザID</td> <td><input type="text" name="uid"></td> </tr> <tr> <td>パスワード</td> <td><input type="password" name="upass"></td> </tr> </table> <input type="hidden" name="act" value="ent"> <input type="submit" name="sub" value="ログイン"> </form> <?php conndb(); if (!chk_auth()) { $act = "log"; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=x-sjis"> <title>ログイン</title> </head> <body> <?php gamen_log(); ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう