2016-04-19 32 views
0

Ich bin ein API-Endpunkt erstellen. Dieser Endpunkt muss mit HTTP-Basisauthentifizierung gesichert werden.PHP Basic Auth setHeader wenn Daten inkorrekt

Wenn API Zugriff fordert möchte ich http Basic Auth anzeigen, wenn Daten inkorrekt sind Ich möchte eine 403 verbotene Nachricht zu werfen. Wenn die Daten stimmen, zeige ich im Moment "korrekt" an. Hier ist mein Code:

$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(); 

    } 

Im Moment löst mein Code 403 die ganze Zeit aus. Irgendeine Idee, wie man das repariert, das meinen oben beschriebenen Anforderungen entspricht?

+0

Dieses Skript nicht auf allen Servern nicht funktioniert, habe ich versucht, es auf einem Web-Server und das Skript hält das Login Aufspringen Dialog, ich habe es auf einem lokalen Host-Server getestet und es hat perfekt funktioniert. – Jer

+0

eine Idee, warum dies auftritt? Auf meinem lokalen Dev-Setup verwende ich MAMP (Apache-Webserver). –

+0

haben noch nicht herausgefunden, warum dies geschieht, aber es hat etwas mit der 'HTTP_AUTHORIZATION' zu tun, denke ich .. unten die Antwort sehen, vielleicht ist das die richtige Antwort ist? – Jer

Antwort

1

Sie verpassen eine =, die den Test in einer Zuweisung macht:

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