【PHP】PEARのAUTHが認証できない原因と考えられるものは何か

このQ&Aのポイント
  • 【PHP】PEARのAUTHがうまくいかない。認証ができない原因と考えられるものは何でしょうか?この記事では、PEARのAUTHライブラリを使用して認証を行う際に問題が発生した場合に考えられる原因について解説しています。
  • PEARのAUTHライブラリを使用して認証を行いたいが、うまくいかない場合、原因は何でしょうか?この記事では、認証がうまくいかない場合の可能性がある要素について詳しく解説しています。
  • 【PHP】PEARのAUTHライブラリを使用して認証を行う際に問題が発生した場合、考えられる原因をまとめました。認証がうまくいかない場合、設定やパラメータの間違い、バージョンの非互換性などが考えられます。詳細な原因と対策について解説しています。
回答を見る
  • ベストアンサー

【php】PEARのAUTHがうまくいかない。

【php】PEARのAUTHがうまくいかない。 http://www.phpbook.jp/pear/pear_auth/ このサイトを見ながら auth の実験をやってるのですが、 どうやっても、 認証できません。 何が原因と考えられるでしょうか? $dns 設定は PEAR::isError($dns) にかけてみたところ うまく通ったので問題ないと思います。 データベースには user user pass 179ad45c6ce2cb97cf1029e212046e81 (testpass) と、ユーザーネームと、ハッシュしたパスワード値を入れています。 念のためにに、両方ハッシュしたのや、両方ハッシュしてないのも入れてます。 authライブラリは、xamppに最初から入ってたやつを使ってます。 ブラウザは firefox で確認しています。 カラム名や、DB名のつづり間違いとか、 設定位置間違いとかも 何度も確認しているので間違いないと思います。 パラメータは こんな感じです $params = array( "dsn" => "mysql://dbID:dbpass@ IP /dbname", 'table' => 'test__main', 'usernamecol' => 'test_us_id ', 'passwordcol' => 'test_us_pw', 'cryptType' => 'MD5', 'db_fields' => '*' ); エディタの文字コードはUTF-8です。DBの文字コードもUTF-8です。 認証ができないだけで、phpにエラーはありません。 mysql の バージョンは 5.1.22-rc-log php の バージョンは 5.2.4 もはや何が原因か思いつきません。 何が原因と考えられるでしょうか・・・。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#243182
noname#243182
回答No.1

デフォルト値にあわせた環境を準備し、接続の確認をしてみてください。 認証のライブラリは接続に成功していなくても、これをエラーとして表示しません。 以下のコードを実行していただくとお分かりいただけるかと思いますが、関連ライブラリの読み込みにさえ成功していれば、その後のことについては教えてくれないのです。 <?php require_once 'Auth.php'; $a = new Auth('MDB2'); $a->start(); ?> 認証フォームが現れ、ログインできないということだけが伝えられるはずです。 独自のテーブル名、カラム名にする前に、デフォルト値を尊重して環境を準備し、接続テストを十分に行うことをお勧めします。 デフォルト値でテストをする場合には、データソースネームのみ設定してください。 本番では暗号化方式に不安が残るでしょうから、独自の塩を振って味付けすることもお忘れなく。

参考URL:
http://pear.php.net/manual/ja/package.authentication.auth.storage.mdb2.php
yuzuru0024
質問者

お礼

回答ありがとうございます。 おっしゃるとおり、ほとんどをデフォルトのままにやってみたら うまくいきました!! (結局以前のやつが、何が原因だったのかよくわかりませんでしたが・・・) これから実験してみるときは、なるべくデフォルト設定のままで やっていこうと思います。

関連するQ&A

  • PEAR AUTH 認証エラーClass 'PEAR_Error' not found

    Fatal error: Class 'PEAR_Error' not found in E:\Program Files\xampp\php\PEAR\DB.php on line 946 アクセスすると上記のエラーが出ます。 以前まで認証できていたのですが何をいじったのか ログインフォームがでなくなりました。 環境は以下の通りです。 ApacheFriends XAMPP (Basispaket) version 1.6.8 Apache 2.2.9 MySQL 5.0.67 (Community Server) PHP 5.2.6 + PHP 4.4.9 + PEAR あまり理解していないので質問を質問で返す可能性がありますが よろしくお願いします。 *********************************************** <?php require_once("../../php/PEAR/Auth/Auth.php"); require_once("loginform.php"); $params = array( "dsn" => "mysqli://hoge:hoge@localhost/hoge", "table" => "test", "usernamecol" => "user", "passwordcol" => "pass", "cryptType"=>"md5", 'db_fields'=>"*" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); ?> ***************************************************

    • ベストアンサー
    • 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,Auth_HTTPの勉強をしています。

    PEARのAuth,Auth_HTTPの勉強をしています。 OS:Fedora10 言語:PHP5 MySQL:5.0 現在以下のような書き方で認証を行っています。 $AuthOptions = array( 'dsn'=>"mysql://test:test@localhost/testdb", 'table'=>"testable", 'usernamecol'=>"username", 'passwordcol'=>"password", 'cryptType'=>"md5", ); $a = new Auth_HTTP("DB", $AuthOptions); $a->start(); まず$AuthOptionsに初期値を入れて認証開始した($a->start();)します。 その後ユーザがパスワード欄に入力した値がpasswordcolの値が代入されると思います。 この代入された値は$AuthOptionsで自分で設定しているようにmd5で暗号化されます。 今のままではユーザが入力した値そのままでmd5に変換しその値を利用する事になります。 それでは困るので簡単にその値が見つからないようにpasswordcolの値に決まった文字列を追加した上でmd5での暗号化を行いデータベースに登録したいと思っています。 どのように記述すればよいのでしょうか? よろしく御願いします。

    • ベストアンサー
    • PHP
  • PEAR::Authの典型的な使用例はどうしてDBのテーブル名がないのですか?

    下記のサイトにてAuthについてのチュートリアルをみたのですが どうしてDBのテーブル名など設定する箇所の記載がないのですか? 本当にこれで動いてますか? http://pear.php.net/manual/ja/package.authentication.auth.intro.php 導入 – 使用例 Authについてのチュートリアル PEAR::Authの典型的な使用例 ちなみに 他の下記のようなサイトには、記載がありました。 Auth で MySQL を使った認証 http://www.bnote.net/php/pear/25_auth_db.shtml

    • ベストアンサー
    • PHP
  • PEARのAUTHについて

    PEARのAuthを使って、認証システムを構築しています。(PHP4.3.0+apache1.3.27+PostgreSQL7.2) 認証そのものはできるのですが、セキュアとするサイトで認証を行わせなくても、その中にあるファイル(*.docとか*.xlsとか)へ直接リンクさせる事で認証なしに開けてしまいます。 BASIC認証だと、そういう事はないのですが…。 直リンクでも、強制的に上位のフォルダの認証を通らせる方法はないものでしょうか。PEARのAuthって実はヘボ?なんじゃないかとショックを受けてます。

    • ベストアンサー
    • PHP
  • PEAR::Auth認証を使いたい

    個人サイトを運営しているものなのですが, 「誰でも見て構わないコンテンツ」と「決まった人しか見てもらいたくないコンテンツ」を作っています。 今はBasic認証でID管理をしています。 ですが,Basic認証だと「認証ダイアログがちょっぴり鬱陶しい」「サーバの負荷が少し高い」といった観点から ダイアログでなく,フォームで認証を行えるPEAR::Authを使いたいと思っています。 Googleなどで調べてみて大体理解したのですが, DBを使わずに,htpasswdファイルのような形での認証を簡単に説明しているサイトが見つかりませんでした。 DBは不慣れなので,管理の面から使いたくないのですが, 上述のような,ファイルによる簡単な管理でPEAR::Auth認証するやり方を教えていただけませんでしょうか? ----- 当方,PHPの簡単なスクリプトを改造出来る程度のレベルのものです。 HTML,CSSは大丈夫です。

    • ベストアンサー
    • 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
  • 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
  • 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
  • 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

専門家に質問してみよう