シンプルな facebook アプリケーションは、データベース サーバー (ラッパーを使用) と通信します。セキュリティ上の理由から、サーバーに何らかのアクションを要求しているユーザーが本当に自分の ID (要求で送信された) の所有者であるかどうかを確認する必要があります。
この目的のために、サーバーへのリクエストには、javascript SDK に基づく Web アプリケーションからの access_token とユーザーの ID が含まれます。アクセストークンの所有者のIDとユーザーのIDが同じかどうかを確認したい。最初のステップは、Facebook からアクセス トークンの所有者の ID を取得することです。コードの使用:
class SessionValidator {
private $userId; //id of user
private $accessToken; //facebook user's access token
private $fb;
public function __construct($userId, $accessToken){
$this->userId = $userId;
$this->accessToken = $accessToken;
$app_id = @appId;
$app_secret = @secret;
$fb = new Facebook(array('appId' => $app_id, 'secret' => $app_secret));
$fb->setAccessToken($accessToken);
$this->fb = $fb;
}
public function authUserSession(){
$url = 'https://graph.facebook.com/';
$data['fields'] = $this->userId;
$data['access_token'] = $this->accessToken;
$response = $this->post_request($url, $data);
return $response;
}
private function post_request($url, $data){
return $this->fb->api('/me', 'POST', $data);
}
}
Facebook は次のような反応を示しています。
キャッチされていない OAuthException: (#10) アプリケーションには、このアクションに対する権限がありません
行を削除した場合も同じ応答です: $fb->setAccessToken($accessToken);
。appId と appSecure が正しいと確信しています。クライアント側のアプリとサーバー側のアプリは別のホストに配置されていますが、両方のドメインがアプリのドメインとして Facebook 開発者サイトに追加されています。このエラーを受け取った理由は何ですか?