当用户从我的网站接受facebook应用程序时,我将用户详细信息和facebook详细信息(访问令牌)存储在数据库中。
当他从facebook删除我的应用程序时,我想从数据库中删除详细信息。这该怎么做?
我可以授予Deauthorize Callback网址。如果有人删除了应用程序,它将重定向到此页面。但是,wt应该是这里从db中删除数据的代码吗?我的意思是,当它重定向时,它会发布访问令牌详细信息,以便我可以收取访问令牌并删除该行。
答案 0 :(得分:13)
应用取消授权
当您的应用的用户将其删除时 应用程序仪表板或阻止应用程序 新闻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”
中