【发布时间】:2015-12-05 00:57:45
【问题描述】:
我最近开始使用 Slim 框架。我目前正在尝试使用中间件进行身份验证。这是调用中间件的地方:
$app->post('/profile', 'authenticate', function () {
// code here
}
这是我的中间件负责身份验证的地方:
function authenticate(\Slim\Route $route) {
// Getting request headers
$headers = apache_request_headers();
$response = array();
$app = \Slim\Slim::getInstance();
// Verifying Authorization Header
if (isset($headers['Authorization'])) {
$db = new DbHandler();
// get the api key
$api_key = $headers['Authorization'];
// validating api key
if (!$db->isValidApiKey($api_key)) {
// api key is not present in users table
$response["error"] = true;
$response["message"] = "Access Denied. Invalid Api key";
echoRespnse(401, $response);
$app->stop();
} else {
global $user_id;
// get user primary key id
$user_id = $db->getUserId($api_key);
}
} else {
// api key is missing in header
$response["error"] = true;
$response["message"] = "Api key is misssing";
echoRespnse(400, $response);
$app->stop();
}
};
我在尝试 POST 调用时收到此错误。其他不需要身份验证的调用都可以正常工作。
致命错误:未捕获异常“InvalidArgumentException”,消息“无法创建 LogWriter。资源句柄无效。在 D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php:60 堆栈跟踪:#0 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(191):Slim\LogWriter->__construct (false) #1 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(228): Slim\Slim->Slim{closure}(Object(Slim\Helper\Set)) #2 D: \Liftmo\Liftmo.com\api\Slim\Helper\Set.php(88): Slim\Helper\Set->Slim\Helper{closure}(Object(Slim\Helper\Set)) #3 D:\Liftmo\ Liftmo.com\api\Slim\Helper\Set.php(185): Slim\Helper\Set->get('logWriter') #4 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(196 ): Slim\Helper\Set->offsetGet('logWriter') #5 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(228): Slim\Slim->Slim{closure}(Object (Slim\Helper\Set)) #6 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(88): Slim\Helper\Set->Slim\Helper{closure}(Object(Slim\ Helper\Set)) #7 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(234): Slim\Helper\Set->get('log') #8 D:\Liftmo\Liftmo.com \api\Slim\Slim.php(402):Slim\Slim->__get('log') 在 D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php 第 60 行
我已经逐行浏览了代码,似乎问题在于行
$db = new DbHandler();
但我很困惑,因为在我的代码中的其他任何地方都使用了该类而没有问题。
require_once 'include/DbHandler.php'; // DbHandler included here at the top
如果有人可以帮助我,我将不胜感激。我从HERE 获得了身份验证。从字面上看,这个问题在任何地方都找不到解决。使用带有 Cloud SQL 的 Google App Engine 进行部署。
【问题讨论】:
-
DbHandler.php文件究竟包含在哪里? -
index.php(帖子中文件的内容)位于项目根目录下名为 api 的文件夹中。在 api 中,有一个名为 'include' 的文件夹,其中包含DbHandler.php -
请提供您创建/配置日志写入器的代码部分
-
我不创建/配置它。这就是我感到困惑的原因。
-
这很奇怪,因为默认情况下,Slim 会将所有错误写入
php://stderr。你对你的 PHP 配置做过什么吗?
标签: php google-app-engine slim