Facebook用户取消对该应用的授权

时间:2011-02-01 07:00:55

标签: php facebook

当用户从我的网站接受facebook应用程序时,我将用户详细信息和facebook详细信息(访问令牌)存储在数据库中。

当他从facebook删除我的应用程序时,我想从数据库中删除详细信息。这该怎么做?

我可以授予Deauthorize Callback网址。如果有人删除了应用程序,它将重定向到此页面。但是,wt应该是这里从db中删除数据的代码吗?我的意思是,当它重定向时,它会发布访问令牌详细信息,以便我可以收取访问令牌并删除该行。

2 个答案:

答案 0 :(得分:13)

authentication document

中明确说明了这一点
  

应用取消授权

     

当您的应用的用户将其删除时   应用程序仪表板或阻止应用程序   新闻Feed,你的应用程序可以   通过指定取消授权通知   Developer App中的回调URL。   在移除应用程序期间,我们将发送   HTTP POST请求包含单个   参数,signed_request,其中   包含用户的用户ID(UID)   刚删除你的应用程序。你会   没有收到用户访问令牌   此请求和所有现有用户   访问令牌将自动进行   过期。

所以在自己的文档中使用signed_request函数:

<?php
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, '-_', '+/'));
}

$result = parse_signed_request($_REQUEST['signed_request'],"APP_SECRET");


$myFile = "deauthorize.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $result["user_id"] . "\n");
fclose($fh);

?>

所以您需要做的就是获取$result["user_id"]查询您的数据库并删除记录。

P.S:我建议添加一个名为active的新字段,然后停用该用户,而不是一起删除所有记录。

修改
Facebook不会将用户重定向到取消授权网址!它只会ping它:

  

Facebook在用户时ping此URL   取消对您的应用的授权

答案 1 :(得分:0)

此代码无效,虽然当用户取消对应用程序的授权时会调用它,但传入该函数的唯一数据是“1”(当应用程序处于活动状态时,测试用户和我自己的FB帐户进行测试)

file_put_contents(“test.txt”,$ fbUserId。“”。print_r($ _ REQUEST ['signed_request']));

在test.txt文件“1”