2010-11-27 11 views
1

我目前正在構建一個Web應用程序(我的第一個),並且希望包含OAuth功能,以便用戶可以通過twitter和facebook登錄。我在Sinatra建設它,並且看了OmniAuth寶石,這似乎是適合這份工作的。我遇到的問題是重新設計用戶模型。使用OAuth時的用戶模型設計

目前我有通常的名字,姓氏,用戶名,電子郵件和密碼,用戶名是唯一的,這樣我就可以使用它作爲ID,並且像twitter一樣,我可以輸入www.myapp.com/用戶名以查找該用戶的信息。我決定,對於初始版本,我只是將twitter用作登錄,然後是facebook,最後是通常的註冊。我的問題是,人們更有可能在Facebook上擁有與Twitter相同的用戶名。因此,例如,如果我使用twitter登錄並採用'newuser'ID,則當來自Facebook的用戶名相同的人嘗試加入時,這將成爲問題。

OmniAuth gem通過提供用戶信息的散列來工作。我將使用Mongo,所以我可以在用戶模塊中包含一個twitter和facebook字段,並將哈希值保留在那裏,對於如何在創建唯一標識的時候我有點難以理解,這兩種服務都將使用相同用戶名的用戶,或者一旦實施常規登錄,某人可以註冊並使用已在Twitter或Facebook上使用的用戶名,從而防止這些用戶使用他們的twitter /臉書註冊賬戶。

我真的很想聽聽別人怎麼接近這個。

+1

再次,應該做了一些更多的搜索。 http://blog.railsrumble.com/blog/2010/10/08/intridea-omniauth這是一篇關於分離用戶和授權的有趣文章。 – 2010-11-27 09:51:57

回答

1

我使用一個表只用於身份驗證密鑰,它意味着:USER_ID,:供應商:鍵列,以及分離式用戶表,:電子郵件,:暱稱,...

如果用戶登錄在他的Twitter帳戶中註銷,然後使用Google帳戶登錄。例如,那麼您將擁有兩個不同的帳戶,並且沒有將任何帳戶與現有帳戶關聯的解決方案。我建議您允許登錄用戶將他當前使用的用戶帳戶鏈接到另一個auth提供者(您應該將用戶從身份驗證中分離出來,並且在首次登錄後,他應該能夠將更多auth密鑰鏈接到他的用戶帳戶)。他登錄到他的主要用戶帳戶(例如使用twitter),並將他的用戶帳戶鏈接到他的Google帳戶,然後在auth頁面上單擊google圖標。

+0

感謝Nucc。一個用戶有兩個獨立賬戶的問題是我所關心的。我想只要一個'連接另一個帳戶'選項清楚標記,這是可以避免的。 – 2010-11-27 11:27:41

相關問題