Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP基本身份验证不';行不通_Php_Basic Authentication - Fatal编程技术网

PHP基本身份验证不';行不通

PHP基本身份验证不';行不通,php,basic-authentication,Php,Basic Authentication,我正在尝试实现小型API,为此,我必须使用basic auth检查用户的API密钥,但出于某些原因,即使是最简单的示例也不起作用: <?php include '../config.inc.php'; $user = $_SERVER['PHP_AUTH_USER']; $validated = false; if( $user == $api_key ); $validated = true; if (!$validated) { header('WWW-Auth

我正在尝试实现小型API,为此,我必须使用basic auth检查用户的API密钥,但出于某些原因,即使是最简单的示例也不起作用:

<?php

include '../config.inc.php';

$user = $_SERVER['PHP_AUTH_USER'];    
$validated = false;
if( $user == $api_key );
    $validated = true;
if (!$validated) {
  header('WWW-Authenticate: Basic realm="API"');
  header('HTTP/1.0 401 Unauthorized');
  exit ("Not authorized");
}
访问index.php时,我遇到以下错误:

Notice: Undefined index: PHP_AUTH_USER in C:\xampp\htdocs\my_admin\api\index.php on line 5

但是,在上面的文件夹中,它可以正常工作。什么会导致此问题?如何解决此问题?谢谢。

您的代码中有一些问题。首先,您需要检查是否确实获得了用户:

$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null;
然后,if语句不起任何作用,
$validated
将始终为真。要解决此问题,请删除分号:

if($user && $user == $api_key ) $validated = true;
或者更好:

$validated = $user && $user == $api_key

也不要检查
isset
,因为变量已明确设置,只需检查它是否为非空,就像我在上面所做的更改一样。

您的代码中存在一些问题。首先,您需要检查是否确实获得了用户:

$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null;
然后,if语句不起任何作用,
$validated
将始终为真。要解决此问题,请删除分号:

if($user && $user == $api_key ) $validated = true;
或者更好:

$validated = $user && $user == $api_key

也不要检查
isset
,因为变量是明确设置的,只需检查它是否如我上面的更改中所示为非空。

这里有一些错误。1.在第一次调用中,
$\u服务器['PHP\u AUTH\u USER']
将永远不存在,因为浏览器尚未获取标题(您在下面设置),用户也未填写任何信息。2.您有
echo$user操作。在发送标题之前,您不能输出任何内容,否则您将得到“headers ready sent”(标题已发送)。当我将其放在api文件夹上方的目录中时,该示例运行良好。即使没有sendind任何额外的头。Echo用户仅用于调试目的。此示例不可能按预期工作。至少没有这个确切的代码。这里有一些错误。1.在第一次调用中,
$\u服务器['PHP\u AUTH\u USER']
将永远不存在,因为浏览器尚未获取标题(您在下面设置),用户也未填写任何信息。2.您有
echo$user操作。在发送标题之前,您不能输出任何内容,否则您将得到“headers ready sent”(标题已发送)。当我将其放在api文件夹上方的目录中时,该示例运行良好。即使没有sendind任何额外的头。Echo用户仅用于调试目的。此示例不可能按预期工作。至少对于这个精确的代码来说不是这样。别忘了还有一个
echo$user
在发送标题之前。我明白了,但问题是“实际基本身份验证”对话框从未出现。@AlexPetrov再次阅读此答案,特别是:“那么您的if语句不起任何作用,$validated将始终为true。若要解决此问题,请删除分号:”。这就是为什么“身份验证”对话框从未出现的原因。@AlexPetrov,试着只放
标题('WWW-Authenticate:Basic realm=“API”);标题(“HTTP/1.0 401未经授权”)以确认对话框是否出现。这意味着你只需要修正导致它的逻辑。正如@Magnus提到的,在调用
header()
之前,您还需要确保不回显任何内容,不要忘记还有一个
echo$user
在发送标题之前。我明白了,但问题是“实际基本身份验证”对话框从未出现。@AlexPetrov再次阅读此答案,特别是:“那么您的if语句不起任何作用,$validated将始终为true。若要解决此问题,请删除分号:”。这就是为什么“身份验证”对话框从未出现的原因。@AlexPetrov,试着只放
标题('WWW-Authenticate:Basic realm=“API”);标题(“HTTP/1.0 401未经授权”)以确认对话框是否出现。这意味着你只需要修正导致它的逻辑。正如@Magnus提到的,在调用
header()