当用户拒绝应用的权限时,我遇到了一些麻烦。
当用户接受权限时,他们会被重定向到应用程序。当用户单击取消/拒绝时,它应该将它们重定向到主页面,但它会循环并要求它们再次接受权限。
我正在使用PHP API,以下是我的代码:
// Development
$app_id = 'XXXXXXXX';
$app_secret = 'YYYYYYYYYY';
$app_url = 'LINK_TO_FACEBOOK_PAGE_TAB';
$cancelUrl = 'LINK_TO_FACEBOOK_PAGE';
$GRAPH_URL = "https://graph.facebook.com/";
$scope = 'publish_actions';
// Init the Facebook SDK
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
));
// Get the current user
$user = $facebook->getUser();
// Get the users token
$token = $facebook->getAccesstoken();
// If the user has not installed the app, redirect them to the Login Dialog
if(isset($_REQUEST['error']))
{
if(isset($_REQUEST['error_reason']) && $_REQUEST['error_reason']=='user_denied')
{
echo "<script>top.location.href='{$cancelUrl}'</script>";
}
}
if (!$user) {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => $scope,
'redirect_uri' => $app_url,
'display' => 'page',
));
print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
}
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
你在这里这样做:
if (!$user) {
如果您不想重定向已拒绝该请求的用户,请检查Facebook用于告诉您用户拒绝该请求的错误参数的存在,并且不要将它们发送回auth对话框,如果你看到它们。
在最基本的层面上,如果登录对话框中的redirect_uri
参数将用户带回您正在进行用户检查的同一页面,这应该可以正常运行并且易于测试:
if (!$user) {
if ($_REQUEST['error_reason'] == 'user_denied') {
//explain why you need them to log in
} else {
$loginUrl = $facebook->getLoginUrl(array( [...]
}
}