我是PHP Rest API的新手。我想升级我的知识,所以我需要为我的网络服务创建一个授权。我想首先询问他们是否有权查看我的网络服务,如果没有,那么他们就不会看到它。
这是我到目前为止所做的:
<?php
include('db.php');
$sql = "SELECT * FROM bb_users";
$stmt = $conn->prepare($sql);
$stmt->execute();
$set = array();
while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
$set = $r;
}
// $username='ABC';
// $password='XYZ';
//header("Authorization: Basic " . base64_encode($username . ":" . $password));
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
echo json_encode($set);
?>
有什么想法吗?我很乐意感谢你的帮助。如果您可以提供一些提示或链接以开始使用。
答案 0 :(得分:0)
这是您尝试做的基本实现。请记住,这使用基本访问身份验证,它不提供任何用户名和密码保护,因为它们几乎通过网络传输。
为了构建更强大的API,我推荐https://www.apigility.org/在我看来它是最好的,如果不是最好的那样,
就身份验证而言,我建议使用OAuth。
仅供参考:我假设你的代码是正确的并且没有任何错误,所以我只是把它移到了if块中。有一个check_if_credentials_are_valid_function
的调用,这是您将定义的函数,并调用以确保用户名和密码有效。如果凭证有效,它将返回json编码数据并退出,否则它将继续到脚本结束并返回401状态代码。
<?php
$headers = apache_request_headers();
if(isset($headers['Authorization'])) {
$authorization = $headers['Authorization'];
if (preg_match('/Basic\s+(.*)$/i', $authorization, $auth)) {
// Split the string, base64 decode it
list($user, $pass) = explode(':', base64_decode($auth[1]));
if (check_if_credentials_are_valid_function($user, $pass)) {
include('db.php');
$sql = "SELECT * FROM bb_users";
$stmt = $conn->prepare($sql);
$stmt->execute();
$set = array();
while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
$set = $r;
}
// $username='ABC';
// $password='XYZ';
//header("Authorization: Basic " . base64_encode($username . ":" . $password));
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
echo json_encode($set);
exit();
}
}
}
header('HTTP/1.0 401 Unauthorized');
exit();
?>