2012-11-02 93 views
1

我寫了一個通過Facebook連接(o-Auth)驗證用戶的網絡應用程序。 用戶通過身份驗證後,我有一個Facebook令牌。 使用此令牌,我向Facebook發送請求以獲取其基本用戶信息。 在這一點上,我有用戶唯一的Facebook ID,我知道它是誰。基於會話ID識別/管理用戶(會話ID到用戶ID到用戶數據的映射)

  1. 我該如何鏈接用戶,令牌和數據庫中的數據? 現在我的模式非常簡單:facebook_id是主鍵,還有一些其他列包含令牌和用戶數據。這是正確的方式嗎?

  2. 我需要在用戶請求上設置唯一的SESSION_ID(cookie)嗎?認證通過後? 我對這部分(以及一般會話管理)感到困惑。當我在會話中設置屬性時,瀏覽器會記住它是否會在每個請求中發送給我的服務器?跨所有頁面?

  3. 而最重要的問題是,我如何在SESSION ID和用戶之間進行映射?一旦我在他的請求中設置了一個會話ID,我需要弄清楚每個請求是誰。什麼是最好的方式來做到這一點?

回答

1
  1. 這很好,你真正想要做的是能夠匹配到與或在你的web應用程序創建的數據的特定的Facebook用戶ID,它不是來自圖形API 。
  2. 目前您完成登錄流程(當您收到訪問令牌時)。當您設置會話時,瀏覽器將記住其中的鍵值對,直到會話被清除。所以你希望你的代碼能夠將使用瀏覽器的人與數據庫中的特定用戶關聯起來(或者如果他們沒有會話的話)。因此,無論您使用哪個會話值,還需要將其與用戶ID一起存儲在數據庫中。
  3. 見上。

儘管如此,最簡單的方法就是使用Facebook Javascript SDK。這將通過cookie自動處理所有訪問令牌檢索和用戶持久性,而無需爲其編寫代碼。最終,這意味着您需要做的只是將Facebook用戶ID存儲在數據庫中,並與應用生成的內容一起存儲,而不必擔心存儲訪問令牌或會話變量。有一個簡單的一步一步的指導,在這裏: https://developers.facebook.com/docs/howtos/login/getting-started/
(第5步中您會收到用戶ID,你可以使一個AJAX調用服務器端代碼從這裏將其存儲在數據庫中)

+0

感謝您寶貴的答覆。 我正在做服務器端登錄,所以它有點棘手。由於服務器代表用戶正在對Facebook進行所有調用。 只是不確定如何維護會議,但你的答案有幫助。 – user1782427

+0

有一個服務器端登錄流的指南,這裏https://developers.facebook.com/docs/howtos/login/server-side-login/它使用PHP,但它是一個通用的過程,所以你可以調整步驟輕鬆轉換成您自己的語言。另外,該文檔中的第6步可能專門用於您正在尋找的內容。 –

+0

我實現了這個流程(從你鏈接的指南,在Java中),它效果很好。 問題是如何在所有流程結束後識別用戶。我需要設置一個會話標識符,以便在每次請求時將其發送給我。不知道我需要設置它。 – user1782427