1

У меня есть следующее в верхней части URL-адреса моего приложения.Кнопка входа в систему Facebook не принимает разрешения при нажатии

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '123456789', 
      status: true, 
      cookie: true, 
      xfbml: true, 
      oauth: true 
     }); 

     FB.getLoginStatus(function(response) { 
      if(response.status === 'connected') { 
       if(response.authResponse != 'undefined'){ 
        window.location = '<?php echo $base_url; ?>register'; 
       } 
      } else if(response.status === 'not_authorized') 
      { 
       //it means we have a user but he hasn't granted any permissions to our app 
       //we're going to redirect him to the permission page 
       window.location = 'https://www.facebook.com/dialog/oauth?client_id=456109407732505&response_type=code&redirect_uri=<?php echo $base_url; ?>register&scope=email,publish_actions,user_likes'; 
      } else 
      { 
       //the user is not logged in, as you already have a login button you don't have to do nothing 
      } 
     }); 

     FB.Event.subscribe('auth.login', function(response) { 
      window.location = '<?php echo $base_url; ?>register'; 
     }); 
    }; 

    (function(d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) return; 
     js = d.createElement(s); js.id = id; 
     js.src = '//connect.facebook.net/en_US/all.js'; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

<div class="fb-login-button" 
    data-show-faces="false" 
    data-scope="email,publish_actions,manage_notifications,user_likes" 
    size="large" 
    data-width="200" 
    data-max-rows="1"> 
</div> 

Единственный раз, когда этот код выдает ошибку, когда пользователь просмотра сайта регистрируется в FB, но не принял разрешения приложения. В этом случае пользователь будет перенаправлен на ссылку, указанную в JS (регистр «https://www.facebook.com/dialog/oauth?client_id=456109407732505&response_type=code&redirect_uri=» & scope = email, publish_actions, user_likes »), где они могут выбрать либо принять, либо отклонить запрошенные разрешения. Если пользователь решит принять разрешения через эту ссылку, все будет хорошо. Однако после нажатия кнопки входа в систему FB появится всплывающее окно, которое также дает пользователю возможность принять или отклонить разрешения. После принятия запрашиваемых разрешений на всплывающее окно по какой-либо причине электронная почта пользователя не извлекается. Пользователь перенаправляется в файл register.php и генерируется ошибка. Однако, когда страница register.php обновляется, она работает нормально.

FB Pop up that doesn't complete registration

В моем файле register.php. У меня есть

require_once('application/third_party/facebook_api/src/facebook.php'); 
$facebook = new Facebook(array('appId' => '123456789', 
           'secret' => 'app_secret', 
           'cookie' => true)); 
$access_token = $facebook->getAccessToken(); 

if($access_token != '') 
{ 
    $user = $facebook->getUser(); 

    if($user != 0) 
    { 
//  Get the user's info 
     $user_profile = $facebook->api('/'.$user); 

//  Get the user's permissions 
     $perms = $facebook->api('/'.$user.'/permissions'); 
     $perms = $perms['data'][0]; 
     $installed = $perms['installed']; 

     if($installed == 1) 
     { 
      $fb_first_name = $user_profile['first_name']; 
      $fb_last_name = $user_profile['last_name']; 

//    Find out if they accepted the email permission 
      $email_perm = $perms['email']; 

      if($email_perm == 1) 
      { 
       $fb_email = $user_profile['email']; 
      } else 
      { 
       $fb_email = ''; 
      } 
     } 
    } 

PHP бросает мне ошибку чтения «неопределенную индекс„электронной почты“.» Он работает на обновления страницы, но не в первый раз. Вы можете перейти к my app, чтобы увидеть рабочий пример.

Благодаря кучу

ответ

0

вы должны «может» не смешивать права чтения и записи больше с кнопкой входа вы должны получить только основные и читать, то в вашем потоке сайта просят писать, когда это необходимо


https://developers.facebook.com/docs/facebook-login/permissions/

Вот несколько рекомендаций для использования при запросе разрешений, как во время и после входа в систему:

Запросить только разрешения, необходимые для приложения.

Запросить разрешение в том контексте, в котором они требуются. Например, если у вас есть приложение, которое хочет показать интересующие вас объекты рядом с домом человека , попросив указать user_location непосредственно перед отображением того, что информация даст человеку более полное представление о том, почему запрашивается разрешение .

Используйте любую доступную общедоступную информацию профиля, прежде чем запрашивать разрешение . Например, есть поле age_range, включенное в общий профиль для всех, кто устанавливает ваше приложение. Это поле может быть , достаточное для вашего приложения, а не для запроса user_birthday .

Отделить запрос на чтение и публикацию разрешений. Для получения дополнительной информации см. Ниже: .

Никогда не просите разрешения, которое, по вашему мнению, может понадобиться в будущем. Люди будут подозрительными и могут отклонить ваше приложение.