【问题标题】:Facebook callback right after opening the Oauth popup打开 Oauth 弹出窗口后 Facebook 回调
【发布时间】:2015-09-02 15:22:22
【问题描述】:

我正在使用fb documentation 建议的登录流程;

HTML

<a href="#">Click me to login!</a>

JavaScript

//USER WANTS TO LOGIN
$("a").click(function() {
  FB.login( checkLoginState(), { scope: 'email,user_birthday,user_likes' });
})

//CALLBACK LISTENER OF WHAT THE USER CHOOSE
function checkLoginState(mode) {
    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
    });
}

//WHAT TO DO DEPENDING ON WHAT THE USER CHOOSE
function statusChangeCallback(response) {
    if (response.status === 'connected') {
        //LIFE IS GOOD
        alert("Thank you, know my php script will handle the rest");
    } else if(response.status == 'not_authorized') {
        //THE USER DOES NOT AUTHORIZE
        alert("Im sorry, you have to authorize the app in order to proceed");
    }
}

问题是,当我调用 FB.login 时,弹出窗口会打开,因为它应该要求用户登录或授权我的应用程序,但是,只要弹出窗口打开 statusChangeCallback 被调用 给我一个状态。我不明白为什么 SDK 一打开就给我一个回调,用户需要“说点什么”(登录,或授权或不授权应用程序)才能触发响应。您会看到,在此流程中,只要用户单击登录按钮,就会弹出警告对不起,您必须授权应用程序才能继续。此外,最糟糕的是,当用户在弹出窗口中引入其凭据并授权应用程序时,没有回调......

我错过了什么?

【问题讨论】:

    标签: javascript facebook facebook-graph-api


    【解决方案1】:

    checkLoginState 需要作为函数传递 int FB.login()。你在叫它。

    您的点击事件活页夹应如下所示:

      $("a").click(function() {
          FB.login( checkLoginState, { scope: 'email,user_birthday,user_likes' });
      })
    

    【讨论】:

      【解决方案2】:

      请进行以下更改并尝试。

      //USER WANTS TO LOGIN
          $("a").click(function() {
            FB.login( checkLoginState, { scope: 'email,user_birthday,user_likes' });
          })
      
          //CALLBACK LISTENER OF WHAT THE USER CHOOSE
           var checkLoginState=function() {
              FB.getLoginStatus(function(response) {
                  statusChangeCallback(response);
              });
          }
      
          //WHAT TO DO DEPENDING ON WHAT THE USER CHOOSE
          function statusChangeCallback(response) {
              if (response.status === 'connected') {
                  //LIFE IS GOOD
                  alert("Thank you, know my php script will handle the rest");
              } else if(response.status == 'not_authorized') {
                  //THE USER DOES NOT AUTHORIZE
                  alert("Im sorry, you have to authorize the app in order to proceed");
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多