2016-04-19 3 views
0

Я создаю конечную точку API. Эта конечная точка должна быть защищена базовым протоколом HTTP.PHP basic auth setHeader, если данные неверны

Если API запрашивает доступ, я хотел бы показать http basic auth, если данные неверны, я хотел бы отправить 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

Этот скрипт не работает на всех серверах, я попробовал его на веб-сервере и скрипт продолжает выскакивать логин диалог, я протестировал его на сервере localhost и отлично работал. – Jer

+0

любая идея, почему это происходит? В моей локальной настройке dev я использую MAMP (веб-сервер apache). –

+0

По-прежнему не выяснили, почему это происходит, но это как-то связано с «HTTP_AUTHORIZATION», я думаю. См. Ответ ниже, может быть, это правильный ответ? – Jer

ответ

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'); 
}