【问题标题】:Facebook user deauthorizes the appFacebook 用户取消对应用的授权
【发布时间】:2014-01-22 00:04:21
【问题描述】:

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

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

我可以提供取消授权回调 url。如果有人删除应用程序,它将重定向到此页面。但是,wt 应该是这里从数据库中删除数据的代码?我的意思是,当它重定向时,它会发布访问令牌详细信息,以便我可以收取访问令牌并删除该行。

【问题讨论】:

  • 只要在这里写下问题就可以找到答案。创建一个页面,将 $_REQUEST/$_GET/$_POST 的内容通过电子邮件发送给您。将其设为您的回调 URL。授权然后取消自己的授权。检查电子邮件,您将确切知道您有哪些可用数据。

标签: php facebook


【解决方案1】:

authentication document中明确说明:

应用取消授权

当您的应用的用户在 应用程序仪表板或阻止应用程序 新闻提要,您的应用程序可以 通过指定取消授权通知 开发者应用中的回调 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 不会将用户重定向到取消授权的 URL!它只会 ping 它:

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

【讨论】:

  • 这正是我们所需要的。不要忘记将 APP_SECRET 替换为您的实际 app_secret。
【解决方案2】:

此代码不起作用,尽管当用户取消对应用程序的授权时会调用它,但传递给函数的唯一数据是“1”(在应用程序上线时使用测试用户和我自己的 FB 帐户进行测试)

file_put_contents("test.txt",$fbUserId . " ".print_r($_REQUEST['signed_request']));

在 test.txt 文件“1”中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多