2012-01-28 60 views
2

我有一個關於使用Omniauth構建用戶系統的常見問題:當我啓用多種身份驗證方法時,我想確保用戶無法通過其他提供者再次註冊 - 無論是意外或故意。我的嘗試是檢查電子郵件地址,這對大多數提供商都適用。Omniauth:映射用戶

但是,當我通過Twitter添加身份驗證此係統因Twitter won't publish the email of the user失敗。

所以唯一能找到的方法是在通過Twitter(或任何其他不發佈電子郵件的登錄提供商)登錄時添加註冊的第二步,我只是想知道是否還有其他更多方便的方法來做到這一點?

任何幫助或建議表示讚賞!

回答

0

您將與LinkedIn有同樣的問題。另外,我個人爲每個加入的網站都使用不同的電子郵件。所以,即使您請求我的電子郵件,但無助於您識別我。如果您只使用Omniauth而不是Devise,則每次用戶登錄時都可以檢查是否已使用其他服務登錄併合並帳戶。這似乎沒有必要,因爲人們通常都會一直登錄到他們的twitter/fb賬戶。只要您在提供註冊頁面之前同時檢查,您應該是黃金。如果你真的想阻止人們擁有多個賬戶,你需要要求和驗證一個手機號碼或嚴格依靠一個單一的提供商。

0

所有你真正關心的是用戶身份驗證,一旦他/她有,你只需要跟蹤身份驗證的用戶ID和他們用來驗證的服務。因此,如果一個人在twitter下登錄並嘗試在Facebook下登錄,那麼您的代碼需要知道與該twitter用戶關聯的user_id(不是UID,如果您是Ryan Bate的railscast),並且該facebook用戶需要具有相同的user_id。你仍然可以讓他使用第二個服務進行身份驗證,但最後一步是檢查user_id登錄到哪個服務器(他們只是登錄到服務器),如果服務不同,這意味着他們試圖在第二個服務中偷偷摸摸。可以處理它