HTTP-аутентификация через PHP - PHP_AUTH_USER не установлен? - PullRequest
8 голосов
/ 14 августа 2011

Я попытался реализовать небольшую аутентификацию через http и скопировал этот бит кода из сети, чтобы проверить, будет ли это работать правильно:

<?php
    if(!isset($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.0 401 Unauthorized');
        echo 'Text to send if user hits Cancel button';
        exit;
    } else {
        echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
    }
?>

Тем не менее, мой браузер всегда запрашивает имя пользователя и пароль, но никогда ничего не выводит, пока я не отменю. Поэтому я думаю, что $_SERVER['PHP_AUTH_USER'] никогда не устанавливается! В чем может быть проблема? Я использую Ubuntu 10.04 LTS Server с Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server.

Ответы [ 2 ]

18 голосов
/ 14 августа 2011

Запустите phpinfo (). если «Server API» - это CGI / FCGI, вы можете забыть об этом, поскольку нет разумного способа использовать HTTP-аутентификацию из PHP.

17 голосов
/ 21 марта 2014

Для PHP-CGI:

в .htaccess добавьте:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

и в начале вашего скрипта добавьте:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
...