js api нет расширенных разрешений после первоначального входа - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь установить разрешение в моем приложении для запроса электронной почты пользователей.

<script>
window.fbAsyncInit = function() {
  FB.init({
    appId      : 'APP_ID',
    status     : true, 
    cookie     : true,
    xfbml      : true,
    oauth      : true,
  });
  FB.Event.subscribe('auth.login', function(response) {
    //window.location.reload();
    window.location = "/welcome.html";
  });

};


(function(d){
   var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = "//connect.facebook.net/en_US/all.js";
   d.getElementsByTagName('head')[0].appendChild(js);
 }(document));
</script>

<div id="fb-root"></div>
<div class="fb-login-button" data-scope="email" >
    Login with Facebook
</div>

Когда пользователь в настоящее время вошел в Facebook, он получает диалоговое окно с просьбой разрешить мое приложение.Он также просит разрешения использовать их электронную почту.Это ожидаемое поведение, и оно работает.

Когда пользователь в настоящее время НЕ вошел в Facebook, ему предоставляется диалог входа в систему (это также ожидается и работает), следующее диалоговое окно, которое появляется, чтобы разрешитьмое приложение, но оно НЕ имеет разрешения на их электронную почту, и именно здесь у меня возникают проблемы.

Я прочитал и попробовал различные методы, которые описаны в других вопросах.Например, вызов метода FB.login с помощью щелчка мышью и установка области разрешения таким образом, но все равно не повезло.просто не вижу, чего мне не хватает.Я также попробовал подход xfbml и столкнулся с той же проблемой, что и с div.

1 Ответ

0 голосов
/ 02 февраля 2012

Будьте осторожны с подпиской на это auth.login событие.Он даже вызывается, когда SDK выполняет проверку входа в систему, когда видит status : true в FB.init().

Обратите внимание, что я делаю с этим здесь: http://jsfiddle.net/dmcs/R4g47/ (он закомментирован, но вы и раскомментируйте его, и запустите скрипт. Вы можете видеть, что хотите обратить внимание на статус, отправляемый этому.

FB.Event.subscribe('auth.login', function(response) {
    // {
    //   status: "",         /* Current status of the session */
    //   authResponse: {          /* Information about the current session */
    //      userID: ""          /* String representing the current user's ID */
    //      signedRequest: "",  /* String with the current signedRequest */
    //      expiresIn: "",      /* UNIX time when the session expires */
    //      accessToken: "",    /* Access token of the user */
    //   }
    // }

    alert('event status: ' + response.status);
});
...