2012-03-07 54 views
0

我已經開始開發一個有facebook集成的網站,它在使用Javascript SDK時似乎可以正常工作。我顯示用戶名稱和個人資料圖片很好。然後我在各處閱讀使用JS進行身份驗證連接的最佳方法,並使用PHP SDK以更簡單的方式運行API。我使用哪個Facebook登錄按鈕,爲什麼?

所以我面臨着使用兩種不同的登錄方法之一,但對於我的生活,我不能只是得到我想要的東西。它看起來好像文檔沒有清楚地解釋他們描述的任何事情的利弊,以及什麼情況最適合於什麼方法。

例如:

<?php if (!$user) { ?> 
    <div class="fb-login-button" data-perms="email,user_birthday">Login with Facebook</div> 
<?php } else { ?> 

    Your user profile is 
    <pre> 
    <?php //print htmlspecialchars(print_r($user_profile, true)) ?> 
    </pre> 

    <?php echo $user_profile['name']; ?> 

    <?php 
    $data = array("message" => "Hello Woghfd!"); 
    $status = $facebook->api("/me/feed", "POST", $data); 
    //echo $user; 

    ?> 
<?php } 

但後來也有其他的按鈕:

<fb:login-button scope="email,user_about_me">Connect Facebooks</fb:login-button> 

然後調用JS的功能的FB.login。

我不會介意這一點,但我測試使用PHP SDK張貼到用戶的牆與此代碼的能力:

$status = $facebook->api("/me/feed", "POST", $data); 

,我不斷收到錯誤消息:

致命錯誤:未捕獲的OAuthException:(#200)用戶未授權應用程序執行此操作

這是我訪問我的網站時。然後,當我註銷並使用我的網站登錄按鈕重新登錄時,它可以正常工作。我明顯不想讓每個訪問該網站的用戶都發生這種情況。

有人可以請解釋所有這些按鈕是什麼意思?我花了幾天時間在互聯網上尋找解釋,但是當考慮到SDK更新時我會感到困惑,因爲我不知道什麼是最好的方法。

謝謝。

回答

1

documentation狀態:

Facebook Platform supports two different OAuth 2.0 flows for user login: server-side (known as the authentication code flow in the specification) and client-side (known as the implicit flow). The server-side flow is used whenever you need to call the Graph API from your web server. The client-side flow is used when you need to make calls to the Graph API from a client, such as JavaScript running in a Web browser or from a native mobile or desktop app.

這使得它非常清楚:如果你想使用圖形API從服務器端,然後使用服務器端的流量,如果你想從API調用客戶端然後使用客戶端流。 您當然可以使用服務器端流程進行身份驗證,然後通過js sdk與圖形api進行交互,或者以其他方式進行交互,但是在他們寫作時這樣做更有意義。

使用登錄按鈕意味着在js sdk的幫助下使用客戶端流程。 的兩種不同形式,你寫的按鍵基本相同,因爲他們在documentation說:

Using the new JavaScript SDK, the plugin is available via the <fb:login-button> XFBML tag or the <div class="fb-login-button"> HTML tag. 

至於試圖張貼在牆上的用戶,當您收到錯誤消息,我沒有看到在你的例子中,你正在請求publish_stream permission這是需要在用戶牆上發佈。

+0

是的,這是有道理的,但我已閱讀所有這些。我確實要求發佈publish_stream權限,然後將其刪除,以查看會發生什麼。以前使用該應用程序的人仍然可以將事情發佈到他們的牆上,但對於新人來說,它會拋出我所陳述的錯誤。這很煩人,因爲我想在我自己的Facebook帳戶上測試人們第一次訪問該網站時獲得的視圖,但沒有任何已經被接受的權限?是否有可能刪除他們接受的每個人的權限? – JamesG 2012-03-07 14:28:01

+0

如果您擁有該權限並且有人授權,那麼他們仍然擁有該權限並將繼續擁有該權限,直到他們移除該應用或撤銷該權限爲止。您自己寫的新用戶將不會擁有此權限,因此該應用無法在自己的牆上張貼。發佈在用戶牆上的唯一方法是獲得該許可。如果你想在他們授權你的應用之前測試它的外觀,那麼你可以只爲你的用戶刪除這個應用,或者只是撤銷權限:隱私設置>應用和網站(編輯設置)>你使用的應用(編輯設置) – 2012-03-07 14:47:44