0

因此,当用户拒绝应用程序的权限时,我遇到了一些麻烦。

当用户接受权限时,他们会很好地重定向到应用程序。当用户单击取消/拒绝时,它应该将他们重定向到主页,但它会循环并要求他们再次接受权限。

我正在使用 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>');

   }

对此的任何帮助将不胜感激。

4

1 回答 1

1

你在这里这样做:

if (!$user) {

如果您不想重定向已经拒绝请求的用户,请检查是否存在 Facebook 用来告诉您用户已拒绝请求的错误参数,如果您不将他们发送回身份验证对话框看他们。

在非常基本的级别上,这应该可以工作并且易于测试,前提是您redirect_uri在登录对话框中的参数将用户带回您正在执行用户检查的同一页面:

if (!$user) {
  if ($_REQUEST['error_reason'] == 'user_denied') {
  //explain why you need them to log in
  } else {
    $loginUrl = $facebook->getLoginUrl(array( [...]
  }
}
于 2013-07-19T21:44:46.427 回答