PHP基本身份验证不起作用

时间:2017-07-24 11:14:37

标签: php basic-authentication

我正在尝试实现小型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

但是,在上部文件夹上它工作正常。什么可能导致这个问题以及如何解决这个问题?谢谢。

1 个答案:

答案 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,因为变量是明确设置的,只需检查它是非空的,就像我在上面的更改中一样。