モバイルアプリがそれと通信できるようにするPHPApiを構築しています。このアプリは、現時点では技術とアイデアをテストするための技術デモです。
アプリのリクエストを保護するには、特定のものに認証が必要になります。
たとえば、次のようにしましょう。
$('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を返送する前に、まずユーザー名とパスワードがDBに存在することを確認し、おそらく同じ方法でApiキーを確認することもできます。 ?
アップデート
私は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によって見られていません。しかし、私がWebインスペクターを見ると、問題なく送信されています。しかし、POSTとOPTIONSの2種類のリクエストが行われていることに注意してください。
何か案は?
これらの更新は、ここで読んだ内容に基づいています:https ://github.com/kvz/cakephp-rest-plugin/blob/master/Controller/Component/RestComponent.php#L516