我正在尝试实现小型API,为此我必须使用基本身份验证检查用户的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");
}
我认为问题在于我使用mod_rewrite
来访问api本身(包括不同的api模块取决于访问过的页面),这里是:
RewriteEngine On
RewriteBase /my_admin/api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
访问index.php时出现此错误:
Notice: Undefined index: PHP_AUTH_USER in C:\xampp\htdocs\my_admin\api\index.php on line 5
但是,在上部文件夹上它工作正常。什么可能导致这个问题以及如何解决这个问题?谢谢。
答案 0 :(得分:2)
您的代码中存在一些问题。首先,您需要检查您是否真正得到了用户:
$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
,因为变量是明确设置的,只需检查它是非空的,就像我在上面的更改中一样。