2012-05-01 16 views
1

我正在製作一個簡單的閱讀畫布應用程序,我想成爲ale來檢查用戶是否已在加載任何內容/文章之前登錄過。當然,我有FB.Init方法,我有內它getLoginStatus,它看起來像這樣(我已經打消了我的命名空間和ID):檢查用戶是否在加載任何其他東西之前已經登錄

<script> 
    window.fbAsyncInit = function() {  
     FB.init(
     { 
     appId : '[APP ID]', // App ID 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
     }); 

     FB.getLoginStatus(function(response) {  
     if (!response.authResponse) { 
     var oauth_url = 'http://www.facebook.com/dialog/oauth/'; 
     oauth_url += '?client_id=[APP ID]'; 
     oauth_url += '&redirect_uri=' + encodeURIComponent('http://apps.facebook.com/[APP NAMESPACE]/'); 
     oauth_url += '&scope=read_stream,publish_stream,offline_access' 
     window.top.location = oauth_url; 
     } 
     }); 

    }; 
    // Load the SDK Asynchronously 
    (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> 

但是,無論我做什麼,它加載我的HTML內容(我的文章,Divs,Paragrafs,文本...),並在完成後重定向。

該腳本是我的HTML頭。我也嘗試通過正文中的onLoad()方法加載它,但這也不起作用,它仍然會在重定向之前加載一些HTML內容。

如何在加載甚至是單個字母或HTML代碼圖像之前,檢查用戶是否登錄Facebook(並重定向,如果他不是)?

回答

1

您正在使用facebook js sdk的異步加載,並且不止如此,一旦您從服務器(靜態內容或動態內容)發回輸出(瀏覽器獲取整個內容並加載它),就沒有多少你可以這樣做。

如果你想檢查用戶是否認證之前,那麼我建議你使用Server-Side auth flow。 通過這種方式,您甚至可以在將內容返回給用戶之前知道狀態,如果發現自己未通過身份驗證,則發送回給他的內容就是重定向內容。 只有當用戶重新進行身份驗證時,纔會發回畫布內容。


編輯

如果你的整個應用程序是靜態的,然後保持這種方式,無需添加PHP(或任何其他服務器端解決方案)只是服務器端驗證。

我不知道是什麼原因,你不介意的頁面重定向之前加載,這裏有兩個「解決方案」:

(1)裝載剛剛在FB SDK和檢查方法最小化的頁面如果用戶登錄或不登錄,他是否會重定向他。 如果他登錄了,然後加載一個腳本,添加其餘內容並動態添加到dom。 (2)如果你不想讓用戶在登錄之前看到某些東西,只需用css隱藏該部分,並在他登錄時使用javasript進行更改。

+0

我可以通過JS SDK做到這一點嗎?我所看到的全部都是PHP示例和片段,而我對PHP的效率並不高。 如果是的話,你能給我一個如何用JS實現這個例子嗎? –

+0

不,您將無法使用js sdk,這僅適用於客戶端使用。你可以找到一些與node.js一起用於服務器端javascript的東西,或者自己編寫,因爲sdk只是http請求的一個外觀。我用python(幾次)和java實現。你在服務器端使用什麼? –

+0

此刻,我的canvas應用程序完全是HTML + JS(根本沒有php),在告訴我之前我甚至沒有意識到服務器端身份驗證,並假定JS SDK FB.login也處理了它。由於它只使用靜態HTML鏈接(無數據獲取),因此我不需要服務器端請求。所以,我想我在服務器端使用NOTHING ... –

相關問題