2016-04-19 19 views
0

私はAPIエンドポイントを構築しています。このエンドポイントは、HTTP基本認証で保護する必要があります。データが正しくない場合のPHP基本認証setHeader

APIリクエストがアクセスされている場合、http基本認証を表示したい場合は、データが正しくない場合は403禁止メッセージを送信します。データが正しい場合は、現時点では単に「正しい」と表示するだけです。ここに私のコード:

$username = null; 
    $password = null; 

    // if data is sent 
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { 
     $username = $_SERVER['PHP_AUTH_USER']; 
     $password = $_SERVER['PHP_AUTH_PW']; 

     //perforn check if data is correct 
     if($username == 'as' && $password = 'pass'){ 
     die(var_dump("correct")); 
     } 
     //if data uncorrect throw 403 code 
     else 
     header('HTTP/1.0 403 Forbidden'); 

    } 

    //request HTTP auth if nothing sent 
    if (!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['PHP_AUTH_PW'])) { 

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

     die(); 

    } 

私のコードは、常に403をトリガしています。どのように私の要件に一致するこれを修正する上の任意のアイデア?

+0

このスクリプトは、すべてのサーバーでは動作しません、私は、Webサーバー上でそれを試してみましたが、スクリプトは、ログインをポップアップ続けます私はlocalhostサーバー上でそれをテストし、それは完全に働いた.. – Jer

+0

これはなぜ発生するか?私のローカルdevのセットアップで私はMAMP(ApacheのWebサーバー)を使用します。 –

+0

これはなぜ起こったのかまだ分かりませんでしたが、私は思うに 'HTTP_AUTHORIZATION'と関係があります。以下の答えを見てください。正しい答えでしょうか? – Jer

答えて

1

あなたが割り当てにあなたのテストを行っている1 =を逃している:

if($username == 'as' && $password == 'pass'){ //right here 
    die(var_dump("correct")); 
} else { //if data incorrect throw 403 code 
    header('HTTP/1.0 403 Forbidden'); 
} 
関連する問題