我最近开始使用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}(对象(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 on第60行
我逐行完成代码,似乎问题在于
行$db = new DbHandler();
我很困惑,因为我的代码中的其他地方都没有使用该类。
require_once 'include/DbHandler.php'; // DbHandler included here at the top
如果有人可以帮助我,我真的很感激。我从HERE获取了身份验证。字面上无法在任何地方找到此问题。使用Google App Engine和Cloud SQL进行部署。
答案 0 :(得分:1)
我在我的应用中遇到了同样的问题,我发现这两个提示有很多帮助:
在应用根目录中存储的php.ini文件中设置google_app_engine.disable_readonly_filesystem = 1属性。参考 - > https://gae-php-tips.appspot.com/2015/03/
使用不同于deafault的方法来处理日志记录,以便能够查看代码或数据库的哪个部分存在问题。我在以下方面找到了一个很好的建议:https://leolutz.com/2014/11/slim-framework-on-google-app-engine/
希望它有所帮助!