2012-04-08 36 views
0

我使用PHP成功驗證用戶,獲取訪問令牌等。對於我的應用程序的一部分,但是我使用Javascript來加載圖像/朋友等。在過去,我曾與getLoginStatus沒有問題,但現在它的返回Facebook Javascript SDK getLoginStatus返回未知(完全不一致)

status: unknown 

的時間約80%。在Firefox和其他瀏覽器中,它似乎更好一些,但我仍然在那裏發生,所以我認爲這只是一種僥倖。我唯一能想到的就是可能會影響到這一點,就是在有人嘗試使用php登錄之前嘗試註銷以前的用戶(但是我試圖恢復文件並在沒有它的情況下進行測試,但仍然無法正常工作,所以,除非它以某種方式搞亂了我的持久化數據我不知道):

$fb_key = 'fbsr_'.$facebookConfig['app_id']; 
setcookie($fb_key, '', time()-3600); 
$facebook->destroySession(); 

似乎無法找到谷歌這事,所以我真的不知道這是怎麼回事。在這一點上,也許我需要使用我通過php獲得的訪問令牌來通過javascript api進行查詢(因爲我仍然可以成功地獲得這個)。我現在正在研究這個問題,但同時我想我會發布信息,以防有人有任何想法!

這裏是我的JS代碼:

window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : pre_fbAppID, // App ID 
     channelUrl : pre_absURL + '/channel.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    doFacebookLogin(); 

    //Facebook can notify us when the user logs in and logs out 
    FB.Event.subscribe('auth.login', function(response) { 
     // do something with response 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 
     // do something with response 
    }); 

    function doFacebookLogin(){ 

     FB.getLoginStatus(function(response) { 
      checkLoginResponse(response); 
     }, true); 
    } 

...

+0

我已經更新了我的答案 – Roni 2012-04-08 10:21:55

+1

這不得不一切跟我用的是PHP的認證,我不知道哪一部分它恰好,但當我切換到只使用JS身份驗證,而不是PHP身份驗證(我仍然通過PHP檢索數據,但只是沒有登錄使用它),它完全解決了這個問題。 – 2012-06-21 10:50:20

回答

1

FB.getLoginStatus

the user is not logged into Facebook at this time and so we don't know if they've authenticated your application or not (unknown)

我認爲你是不正確初始化您JS SDK或FB.init之前調用它。 (與here相同)

您可以發佈您的關於FB.getLoginStatus的JavaScript塊嗎?

更新: 爲什麼在FB.getLoginStatus中有「true」?

爲了提高應用程序的性能,並非每個檢查用戶狀態的調用都會導致對Facebook服務器的請求。在可能的情況下,響應被緩存。在當前瀏覽器會話中第一次調用FB.getLoginStatus,或者JDK以狀態:true初始化時,響應對象將由SDK緩存。 隨後調用FB.getLoginStatus將從此緩存的響應中返回數據。

如果第一次調用返回未知 - >所有其他人將返回相同。 你可以嘗試沒有「真實」?

更新#2:

要獲得這一呼籲的迴應,你必須訂閱auth.statusChange事件。此事件傳遞的響應對象與通過顯式調用FB.getLoginStatus返回的響應對象相同。

您訂閱的所有其他人,除了auth.statusChange

+0

我試圖起飛真正的,並添加auth.statusChange並沒有工作。即使facebook提供的js api示例也不適用於我(用戶可以成功登錄,但數據不是持久的,下次嘗試登錄時它們會處於未知狀態並需要再次登錄)。我只是創建一個使用PHP的工作,但它不是很理想。 – 2012-04-08 13:51:15

+0

您是否看到任何Javascript錯誤?你在測試這個瀏覽器? – Roni 2012-04-08 14:02:05

+0

沒有JS錯誤。測試IE8,IE9,Chrome,Safari和FF。我想說除了FF之外,所有瀏覽器中至少有50%會發生這種情況,出於某種原因,我只在Firefox中看到過它發生過幾次(我不知道這只是巧合還是與某些事情有關)。 – 2012-04-08 17:48:19

0

初始化:

window.fbAsyncInit = function() { 
 
      FB.init({ 
 
       appId: 'xxxxxxxxxxxxx', 
 
       cookie: true, 
 
       xfbml: true, 
 
       version: 'v2.2' 
 
      }); 
 
      //FB.getLoginStatus(function (response) { 
 
      // statusChangeCallback(response); 
 
      //}); 
 
     };

開始Facebook登錄:

function startFace() { 
 
      FB.getLoginStatus(function (response) { 
 
       statusChangeCallback(response); 
 
      }); 
 
     }

通話狀態:

function statusChangeCallback(response) { 
 
      if (response.status === 'connected') { 
 
       loginFacebook(); 
 
      } else if (response.status === 'not_authorized') { 
 
       //some code 
 
      } else if (response.status === 'unknown') { 
 
       FB.login(function (response) { 
 
        statusChangeCallback(response); 
 
       }); 
 
      } else { 
 
       //some code 
 
      } 
 
      
 
     }

相關問題