2011-03-01 62 views
7

我正在使用rails 3構建Web應用程序。我有我自己的用戶註冊,登錄和身份驗證工作正常,我期待添加Oauth 2實現,以便人們可以與Facebook連接並登錄/註冊步驟較少。使用Oauth 2建模用戶2

我已經開始這項工作的成功。到目前爲止,我可以通過Facebook來驗證用戶身份,並允許我訪問他們的信息。我還沒有嘗試設置Twitter身份驗證,但我認爲它會以類似的方式工作。

我現在正在思考的是如何將其整合到我現有的用戶模型中,該模型基本上由具有電子郵件,名稱和密碼的用戶表組成。

如果我離開我的用戶表,因爲它是和建立一個接入提供商表:

id | user_id | provider_id | access_key 
--------------------------------------- 
1 | 4 |  1  | xyz 
2 | 4 |  2  | pqr 
3 | 7 |  1  | dfr 

,讓說「用戶的Facebook信息」表在哪裏存儲有關其作爲從收集用戶信息在Facebook圖表中訪問該用戶?

這樣我就可以保持用戶表的規範化,每個用戶都有核心信息,無論他們是否通過Facebook連接(名稱,電子郵件,密碼),並補充數據與他們的Facebook配置文件中的數據,如果它變成可用?

有沒有更好的方法來做到這一點?有沒有一個很好的指導或教程來設計這種類型的數據庫模型(想想Quora)?我也可以處理PHP教程!

對不起,開放式問題。

回答

6

如果您嘗試同時使用Twitter和Facebook,則可能需要考慮爲您的OAuth客戶端使用Signet或OmniAuth。自從我編寫它以來,我偏向於Signet,但OmniAuth現在可能是更好的選擇,因爲它已經有了更長的時間,這取決於你想要做什麼。

至於數據建模,你有正確的想法。儘管你可能需要使它更通用一些。您可能需要access_token和潛在的refresh_token作爲OAuth 2,而不僅僅是access_key。與此同時,OAuth 1使用憑證密鑰/密鑰對。所以也許像這樣(省略主鍵和外鍵):

auth_scheme | access_token | refresh_token | key | secret | username | password 
------------------------------------------------------------------------------- 
oauth_1  |    |    | 123 | 456 |   | 
oauth_2  | 123   |    |  |  |   | 
oauth_2  | 123   | abcd   |  |  |   | 
xauth  |    |    |  |  | abcd  | 12345 
clientlogin |    |    |  |  | abcd  | 12345 
+0

很高興看到我至少在正確的軌道上!無論如何,我看了一下Signet和OmniAuth GitHub網站,發現了一些關於這個主題的RailsCasts。我決定一路走回頭路,爲用戶控制實施Devise,然後在其上層疊OmniAuth。在這一點上,我選擇了OmniAuth而不是Signet,主要是因爲它看起來像提供了更全面的文檔(我是一個noob!),我喜歡RailsCasts有關它的整合的事實。真的很感謝您的文章的完整披露和感謝。 –