我正在使用Slim和REST实现基本身份验证。我已经通过Composer安装了基本的auth并使用了下面的代码。
<?php
require 'confing.php';
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim;
$app->add(new \Slim\Middleware\HttpBasicAuthentication([
"path" => "/admin", /* or ["/admin", "/api"] */
"realm" => "Protected",
"users" => [
"root" => "t00r",
"user" => "passw0rd"
],
"callback" => function ($request, $response, $arguments) {
print_r($arguments);
}
]));
$app->get('/getLaboorState/:laboor_id', function($laboor_id) use ($app) {
$db =getDB();
$sql="SELECT status FROM laboor WHERE laboor_id='".$laboor_id."'";
$stmt = $db->query($sql);
$items = $stmt->fetchAll();
echo json_encode($items);
});
$app->run();
?>
当我现在尝试将/ getLaboorState与Postman连接时,它什么都不返回。我在邮递员中使用了相同的用户名和密码,没有任何显示,但是当我使用基本身份验证时,它工作正常。
其他问题是,在实现基本身份验证之后,如何在运行查询之前限制所有slim api去抛出每个api?
这是Postman的照片:
注意:然后我想将API与AJAX一起使用。
答案 0 :(得分:0)
您已配置两个用户:
root
,密码为t00r
user
,密码为passw0rd
根据您的屏幕截图,您尝试使用密码为t00r
的用户名passw0rd
。这在您的配置中不存在。使用上面提到的用户名密码组合之一。
答案 1 :(得分:0)
你需要使用$ authenticate($ app)来限制所有slim api在运行查询之前抛出每个api
$app->get('/profile(/)(:id)', $authenticate($app), function($laboor_id) use ($app) {
//Your logic here
})->name('profile');
$authenticate = function ($app) {
return function () use ($app) {
//your logic here
if (!isset($_SESSION['ID'])) {
$app->redirect($app->urlFor('loginpage'));
}
};
};
使用下面的代码显示调用Ajax请求时出现的确切错误
header('Access-Control-Allow-Origin: *');
ini_set('display_errors', 1);
error_reporting(E_ALL);
希望这会有所帮助,如果有效,请接受答案..或评论