Facebook graph api 为什么facebook javascript登录代码会导致无休止的循环?

Facebook graph api 为什么facebook javascript登录代码会导致无休止的循环?,facebook-graph-api,facebook-javascript-sdk,Facebook Graph Api,Facebook Javascript Sdk,当我运行此代码时,登录弹出窗口和控制台日志开始以无休止的循环方式运行。我不确定是否正确使用了FB.login()方法。在用户到达我的已连接应用程序的情况下,我希望提示输入权限,如果授予权限,是否会返回一个“已连接”状态,如果拒绝,我应该检查并处理该状态 FB.Event.subscribe('auth.authResponseChange', function(response) { if (response.status === 'connected') { //if conne

当我运行此代码时,登录弹出窗口和控制台日志开始以无休止的循环方式运行。我不确定是否正确使用了FB.login()方法。在用户到达我的已连接应用程序的情况下,我希望提示输入权限,如果授予权限,是否会返回一个“已连接”状态,如果拒绝,我应该检查并处理该状态

 FB.Event.subscribe('auth.authResponseChange', function(response) {

    if (response.status === 'connected') {

//if connected open permissions dialog

       FB.login(function(response) {
//if user grants permissions, make ajax call to pass signed request to php page

       if(response.status === 'connected'){


               $.ajax({
        url : "http://xxxxxxio/bn/s_Request.php",
        type : 'POST',
        data: {signed_request: response.authResponse.signedRequest},
        success : function (result) {

           console.log(result);
        },
        error : function () {
           alert("error parsing signed request");
        }
      });//closes ajax 

            }else{
                //if authorization cancelled, redirect to home page

                     window.location = "http://spilot.kd.io/bn/index.php";

                }//closes else

 }, {scope: 'user_location,user_likes'});

      testAPI();

    } else if (response.status === 'not_authorized') {
      // the person is logged into Facebook, but not into the app

     FB.login(function(response) {
             // handle the response
 }, {scope: 'user_location,user_likes'});

    } else {
      //  the person is not logged into Facebook, call the login() 

      FB.login(function(response) {
             // handle the response
 }, {scope: 'user_location,user_likes'});

    }//closes else

  });//closes event subscribe

var testAPI = function() {
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function(response) {
      console.log('Good to see you, ' + response.name + '.');
    });
  };

如果用户到达您的应用“已连接”,则他/她已通过您的应用授权并提供了必要的权限。请参阅本页

getLoginStatus允许您确定用户是否登录到 Facebook并已验证您的应用程序。有三种可能 用户的状态:

  • 用户已登录Facebook并已验证您的应用程序(已连接
  • 用户已登录Facebook,但尚未对您的应用程序进行身份验证(未授权
  • 用户目前未登录Facebook,因此我们不知道他们是否验证了您的应用程序(未知
CBroe是对的,您希望监视从每个调用中得到的响应,
FB.Event.subscribe('auth.authResponseChange'
FB.login

如果您想提供“更多”权限,可以稍后在应用程序中发布这些权限

为了减少冗余,我们可以退出此功能

FB.login(function(response) {
             // handle the response
 }, {scope: 'user_location,user_likes'});
然后放进类似的地方

function login() {
    FB.login(function(response) {
                 // handle the response
     }, {scope: 'user_location,user_likes'});
}
然后你可以得到条件的最后两部分,比如

} else if (response.status === 'not_authorized') {
  // not_authorized
    login();
} else {
  // not_logged_in
    login();
}
我快速浏览了您之前的问题,您似乎已经掌握了窍门,但这是一种非常艰难的迂回黑客方式。因此,为了完全避免这种情况,让您了解全局,我建议您退后一步,全面审视您的应用程序,回到您尝试实现的主要目标上g>


听起来你是在通过AJAX向PHP SDK发送签名请求(?),而PHP SDK应该已经有一个函数库来处理这个问题。所以,退一步,返回问题的浓缩形式。

否,FB.login不返回“已连接”。请将它的返回值记录到浏览器的控制台,以便您查看实际得到的结果。好的。非常感谢您提供的详细答案和提示。我仍在学习很多,因此这很有帮助。