Http-аутентификация с PHP не работает - PullRequest
2 голосов
/ 20 марта 2012

У меня есть Plesk Server, где PHP работает как CGI.

    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>";
}

Приведенный выше скрипт должен запросить имя пользователя и пароль.(Да, это так). После ввода любого пользователя / пароля он должен распечатать их.(Нет, он всегда спрашивает пользователя / пароль)

Как это исправить?

Ответы [ 4 ]

13 голосов
/ 08 марта 2014

У меня тоже есть эта проблема на одном из моих серверов, и следующие проблемы решили ее для меня. По-видимому, это связано с использованием CGI. http://www.besthostratings.com/articles/http-auth-php-cgi.html

.htaccess:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

PHP:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
0 голосов
/ 20 мая 2019

Попробуйте добавить строку beow в ваш файл .htaccess

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
0 голосов
/ 20 марта 2012

Вот файл, который я включаю в любой проект, находящийся в стадии разработки:

<?php

// protecting page of unauthorized access

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){ 
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];

    if ($user == 'username' && $pass == 'dev'){
        return;
    }
}

header('WWW-Authenticate: Basic realm="Protected zone"');
header('HTTP/1.0 401 Unauthorized');
echo 'Login failed.';
exit;

Просто включите его в ваш index.php, прежде чем что-либо еще.

0 голосов
/ 20 марта 2012

Рассматривали ли вы использование более стандартных файлов .htaccess / .htpassword (если вы используете Apache)? http://httpd.apache.org/docs/2.0/howto/auth.html

Здесь $ _SERVER ['PHP_AUTH_USER'], похоже, никогда не будет установлен, поэтому он всегда будет отображать это всплывающее окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...