2014-02-20 46 views
0

我使用Oauth寶石登錄到我的網絡應用程序與臉譜,微博和谷歌帳戶。爲此,我在他們每個人中都創建了一個項目,並獲得了應用程序ID和祕密ID。我想在我的數據庫中有一個條目,即使用戶使用同一個郵件ID登錄了所有三個。我們將以下信息存儲在數據庫中(電子郵件,名稱,提供者,uid)。問題是Twitter不提供郵件ID。所以我計劃從暱稱生成郵件標識。有無論如何找到登錄用戶是相同的 - Oauth

user.rb

//for facebook and google 
user = User.create(name:auth.extra.raw_info.name, 
         provider:auth.provider, 
         uid:auth.uid, 
         email:auth.info.email, 
         password:Devise.friendly_token[0,20], 
        ) 

//for twitter 
user = User.create(name: auth['info']['nickname'], 
         provider: auth.provider, 
         uid: auth.uid, 
         email: auth['info']['nickname'] + '@twitter.com', 
         password:Devise.friendly_token[0,20], 
        ) 

例如

我的郵件編號[email protected]在Facebook,Twitter和谷歌登錄。但在我的分貝它創建兩個條目

11 | [email protected]    // for facebook and google 

12 | [email protected]    // for twitter  

我不知道這種行爲。是否有任何其他可能的方式來找到登錄的用戶是同一個人?我只需要一個條目。如果可能,請向我建議任何更好的方法。

+1

如何將twitter ID和同一用戶的Gmail地址關聯起來? – emaillenin

回答

0

據我所知,目前這是不容易的。如果twitter和其他服務之間沒有共同的信息,您如何自動將它們關聯起來?另外,如果您爲通過Twitter登錄的用戶組成了@twitter.com電子郵件地址,那麼您的數據庫中有一個無效/不可用的電子郵件地址(除非該用戶是Twitter的員工,並且恰好有一個與Twitter相同的名稱他們的電子郵件地址的本地部分 - 但更糟糕的是,如果有人碰巧擁有與Twitter員工的電子郵件地址的當地部分相匹配的Twitter名稱,但不是該員工,則您擁有有效的電子郵件地址,但用戶您的網站並不擁有它 - 我不知道這是否可能不正確,並且如果您使用:可以確認的話,他們不會確認電子郵件地址)。

你有至少兩個選擇:

  1. 當人已經通過Twitter和回報登錄到您的網站,詢問他們的電子郵件地址,以便您可以檢查他們是否已經註冊接着就,隨即。
  2. 爲來自Twitter的用戶生成某種虛假的唯一電子郵件地址,您可以稍後將其假冒(所以您從不嘗試確認或發送任何其他電子郵件)或允許空白電子郵件地址(可能有點棘手因爲通常假定電子郵件地址是爲每個用戶定義和存在的)。然後,允許用戶通過使用其中一個登錄來合併網站上的任意帳戶,然後輸入另一個帳戶的憑證(憑證需要通過外部服務登錄,因爲他們不會知道您的自動帳戶,生成Devise.friendly_token密碼,除非其他帳戶是直接在您的網站上註冊的帳戶,如果您支持的話)。然後,您必須處理合並與這兩個帳戶相關的任何內容,這可能會非常棘手,具體取決於您與模型中的用戶關聯的內容。

對於一個全面的系統,無論如何,您可能希望允許人們合併任意賬戶,例如,在谷歌和Facebook上以不同的電子郵件地址註冊同一個人的情況。

此外,請注意,您不一定會從Facebook返回一個通過Facebook登錄的人的電子郵件地址。人們只需使用電話號碼就可以在Facebook上註冊,所以在這種情況下Facebook沒有他們的電子郵件地址。

相關問題