2011-07-08 20 views
1

私はajax経由でhttp基本認証をしようとしています。基本的なhttp auth via ajax and php

$.ajax({ 
     url: 'secure/index.php', 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", "Basic " + Base64.encode("user" + ":" + "password") //May need to use "Authorization" instead 
     }, 
     success: function(result) { 
      alert(result); 
     }, 
     error:function (xhr, ajaxOptions, throwBnError){ 
      alert(xhr); 
      alert(thrownError); 
     } 

問題は、HTTP認証を行うために.htaccessファイルを使用しないことです。

私は、これは認証を行うシンプルなPHPファイルを持っている:

header('WWW-Authenticate: Basic realm="Secret page"'); 
header('HTTP/1.0 401 Unauthorized'); 

をそして、私のAJAXリクエストが動作するように望んでいない...

私が間違って何をしているのですか?

+0

あなたは 'send()'を呼び出していますか?もしそうなら、エラーまたはリターンコードは何ですか? – Joe

+0

私は確信していません。どういう意味ですか? – Julien

+0

申し訳ありませんが、間違ったフレームワークは私の心の中で送信します。しかし、正確に何が働いていないのですか? – Joe

答えて

0

私はこれまで同様の問題がありました。次のように関数を使用することができます

function http_auth_get($url,$username,$password){ 
$cred = sprintf('Authorization: Basic %s', 
base64_encode("$username:$password")); 
$opts = array(
    'http'=>array(
      'method'=>'GET', 
      'header'=>$cred 
     ) 
); 
$ctx = stream_context_create($opts); 
$handle = @fopen($url, 'r', false,$ctx); 

if (!$handle) {   
     die($http_response_header[0]); 
} 

return stream_get_contents($handle); 
} 

PHPの認証ファイルにこの機能を追加すること 試してください:あなたは$の戻り変数がアクセスしようとしているかに依存します使用方法

$return = http_auth_get(http://example.com,user,pass); 

+0

この機能は次にどのように使用しますか?私は本当に私のPHPファイルに配置する場所を知りません。 – Julien

+0

secure/index.phpファイルの上に置いて、アクセスしようとしているリソースのURL、ユーザー名、パスワードを使って関数を呼び出します。関数の戻り値を変数($ returnなど)に代入してから、変数$にアクセスしようとしているリソースの内容を返します。戻り値 – Mark

+0

ありがとうございます!私はあなたの関数と最後の行を置く "index.php"ファイルに対してajaxリクエストを行います:echo http_auth_get( 'basic.php'、 'user'、 'pass');しかし、私のajaxリクエストは、 "basic.php"のPHPコードを実行せずに返します。 – Julien

0

あなたは.ajaxのユーザー名とパスワードのフィールドを使ってみましたか?

$.ajax({ 
    url: "http://mydomain/mypage.php", 
    username: u, 
    password: p, 
    error: function() { 
    } 
}).done(function(html) { 
     //Do Stuff 
}); 

これはほとんどの場合、私にとってはうまくいきます。