问题是,当用户点击我网站上的FB登录按钮时,Facebook API会向他发出一个请求访问权限的窗口(这是常用的流程)。但是当用户选择代理邮件地址(匿名)时,我想强制用户仅使用他的真实电子邮件ID登录。
我该怎么办呢?
我可以检测到该用户使用了代理电子邮件并阻止他注册,但是我无法从他的授权应用列表中删除我的应用 - 这意味着我无法让他进入初始对话框来选择他将要发送的电子邮件提供。
答案 0 :(得分:2)
您无法强制用户再次通过授权对话框,因为就Facebook而言,用户已经安装了您的应用程序,并且不需要进行任何其他操作。您可以在这里做的最好的事情是编写自己的表单,通知用户Facebook代理电子邮件地址是不可接受的,您需要一个真实的电子邮件地址。不幸的是,这并不会强迫用户提供他们的Facebook帐户电子邮件地址,甚至是真实的电子邮件地址。这是我们通过Facebook获得的最好的,而且这只是我们必须处理的事情。
更新5/10/11
我浏览了Facebook文档,发现旧的 Legacy REST API 中存在一种方法,它实际上允许您从用户中删除应用的扩展权限。我认为你可以使用这个确切的API调用来管理从你的Facebook用户获取非代理地址,同时仍然使用本机安装对话框。
我使用FB JS SDK对此进行了测试,但它确实有效!您需要使用的方法是auth.revokeExtendedPermission
方法。以下是通过JS SDK和PHP SDK调用该方法的两个示例。
<强>使用Javascript:强>
<script>
FB.api({
method: 'auth.revokeExtendedPermission',
perm: 'read_stream'
}, function(response)
{
console.log(response)
});
</script>
<强> PHP:强>
<?php
$facebook->api(array(
'method' => 'auth.revokeExtendedPermission',
'perm' => 'email',
'uid' => $uid
));
因为它们使用 Legacy REST API ,所以它们不像新的Graph API那样“受支持”。我没有看到任何有关将此功能迁移到Graph API的信息。希望他们会。
答案 1 :(得分:0)
使用php sdk通过图形api(如下所示)调用应用程序的撤销,然后通过对话框重定向用户,并解释此非代理要求。
private function revokeAccess() {
$access_token = $this->facebook->getAccessToken();
$result = $this->facebook->api(array(
'method' => 'auth.revokeAuthorization',
'uid' => $this->{facebook id here},
'access_token' => $access_token
));
return $result;
}
这段代码是php 这完全删除了应用程序 成功时返回1;失败时为0 来自facebook php sdk的$ this-&gt; facebook == facebook对象。