我正在构建一个允许移动应用程序与之对话的 PHP Api。该应用程序目前更像是一个技术演示,用于测试技术和想法。
为了保护应用程序请求,某些事情需要身份验证。
因此,让我们以以下为例:
$('form').submit(function(e){
e.preventDefault();
var form = $(this);
var data = form.serialize();
$.ajax({
type: 'POST',
url: form.attr('action'),
data: data,
success: function(response){
// show success message or error depending on authentication
},
error: function(a,b,c) {
}
});
});
我还header('Access-Control-Allow-Origin: *');
用来允许应用程序与它和通配符对话,因为它目前只是一个测试。然而,在现实生活中,我不会有一个域,因为它将从移动设备而不是另一个域(很可能是PhoneGap)运行。
我在网上环顾四周并遇到了,HTTP Authorization
但无论我阅读了多少文档,我都无法理解它。
它的一个例子是这样的:
Authorization: TRUEREST username=john&password=test&apikey=247b5a2f72df375279573f2746686daa
我已经考虑过根据我在 jQuery 文档中看到的内容来传递所说的数据:
data: {
username: 'john',
password: 'test',
apiKey: '247b5a2f72df375279573f2746686daa'
},
headers: {
Authorization: "TRUEREST"
},
在发回 JSON 之前,我可以先检查数据库中是否存在用户名和密码,也可能以同样的方式检查 Api 密钥。但我根本不了解 TRUEREST 部分或它可以为代码提供什么?
更新
我一直在我的 jQuery 代码中尝试以下内容:
headers: {
Authorization: "TRUEREST",
username: 'dave',
password: 'test',
apiKey: 'qwe123'
},
然后在我的 PHP 中:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Authorization,Content-type,username,password,apiKey');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$headers = $_SERVER['HTTP_AUTHORIZATION'];
$parts = explode(' ', $_SERVER['HTTP_AUTHORIZATION']);
header('Content-type: application/json');
print json_encode($parts);
exit;
返回的 JSON 只是 TRUEREST!PHP没有看到其他任何人。但是,如果我查看网络检查器,它们会被很好地发送。但注意到有两种类型的请求正在发出 POST 和 OPTIONS。
有任何想法吗?
我将这些更新基于我在这里阅读的内容:https ://github.com/kvz/cakephp-rest-plugin/blob/master/Controller/Component/RestComponent.php#L516