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

apa*_*rna 7 php facebook

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

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

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

ifa*_*our 13

身份验证文档中明确说明:

应用程序取消授权

当应用程序的用户在App Dashboard中删除它或阻止News Feed中的应用程序时,可以通过在Developer App中指定Deauthorize Callback URL来通知您的应用程序.在移除应用程序期间,我们将发送一个HTTP POST请求,其中包含一个参数signed_request,其中包含刚删除应用程序的用户的用户ID(UID).您将不会在此请求中收到用户访问令牌,并且所有现有用户访问令牌将自动过期.

所以signed_request在自己的docuement上使用该函数:

<?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);

?>
Run Code Online (Sandbox Code Playgroud)

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

PS:我建议添加一个名为的新字段active,只是停用用户而不是一起删除记录.

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

当用户取消对您的应用授权时,Facebook会ping此URL