FB App:从应用程序中提取用户数据

时间:2010-08-26 03:16:13

标签: php facebook

方案

Facebook应用程序驻留在用户A的个人资料中(在名为Welcome的选项卡中)。用户A可以填写欢迎消息并更新消息。

用户B访问用户A的个人资料,单击“欢迎”选项卡并查看用户A写入的欢迎消息。

我了解如何完成大部分应用程序和映像,我将根据与用户A的Facebook ID相关联字段的数据库查找生成响应。

我不明白的是如何获取安装APP实例(用户A)的用户的用户ID值,或者如何获取用户B当前所在的配置文件的用户ID(也是碰巧是用户A)。

关于如何最好地攻击这个的任何想法?

1 个答案:

答案 0 :(得分:0)

找到答案。当您的应用程序作为选项卡安装时,用户的配置文件以及其他参数将以编码字符串形式传递。以下是我如何拉取profile_id的示例。

function getProfileID($post){
global $FB_secret;
$SR = $post['signed_request'];   
$PSR = parse_signed_request($SR,$FB_secret);
return $PSR['profile_id'];
}

function parse_signed_request($signed_request, $secret) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
    error_log('Unknown algorithm. Expected HMAC-SHA256');
    return null;
  }

  // check sig
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

添加这些功能,然后在某处添加以下命令:

$profile_user = getProfileID($_POST);

请注意,该脚本假定您将秘密密钥值分配给$ FB_secret以使其正常工作。