Facebook:使用JS SDK在授权之前检索Request对象(来自request_id)

时间:2011-09-09 16:16:44

标签: facebook-graph-api facebook

当用户通过apprequest进入我的应用时,Facebook会将一个request_id附加到该网址。

我试图在用户授权我的应用程序之前访问此对象。当我尝试拨打api电话时:

FB.api('/'+requestId, function(response){ console.log(response); }); 

它返回以下内容:

error: Object
message: "An access token is required to request this resource."

但是我应该有访问权限,因为我的应用程序首先发送了请求!

我做了一些挖掘,我注意到在PHP方面,如果可用,它将使用user_access_token,否则将使用app_access_token。

这是一个安全限制(即:不能在客户端公开app_access_token)或者我做错了什么?

任何见解都会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

当您向/ {user_id} / apprequests发出请求时,您必须已经授权用户... 由于请求是由您的应用程序创建的 - 只有您的应用程序可以管理 - 删除或读取已发送的请求。基本上,在用户授权你的app之前,他/她对你的应用程序是匿名的 - 因此你不可能阅读那些用户请求,因为你“不知道”他们是谁......

希望这会有所帮助......

答案 1 :(得分:-1)

以下博客文章介绍了如何与请求进行互动,并希望能够回答您的问题。

http://developers.facebook.com/blog/post/464

<?php 

  $app_id = 'YOUR_APP_ID';
  $app_secret = 'YOUR_APP_SECRET';

  $token_url = "https://graph.facebook.com/oauth/access_token?" .
    "client_id=" . $app_id .
    "&client_secret=" . $app_secret .
    "&grant_type=client_credentials";

  $access_token = file_get_contents($token_url);

  $signed_request = $_REQUEST["signed_request"]; 
  list($encoded_sig, $payload) = explode('.', $signed_request, 2);
  $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
  $user_id = $data["user_id"];

  //Get all app requests for user
  $request_url ="https://graph.facebook.com/" .
    $user_id . "/apprequests?" .
    $access_token;
  $requests = file_get_contents($request_url);

  //Print all outstanding app requests
  echo '<pre>';
  print_r($requests);
  echo '</pre>';

  //Process and delete app requests
  $data = json_decode($requests);
  foreach($data->data as $item) {
    $id = $item->id;
    $delete_url = "https://graph.facebook.com/" .
      $id . "?" . $access_token . "&method=delete";

    $result = file_get_contents($delete_url);
    echo("Requests deleted? " . $result);
  }
?>

当用户通过您的应用令牌跟踪请求时,您可以访问应用生成的请求,但您需要用户令牌才能访问其余用户请求。