2015-07-06 44 views
1

假設我有Meteor中的Facebook,Google和用戶名/密碼登錄包。電子郵件地址爲[email protected]的用戶使用此電子郵件和密碼註冊。後來他忘記了他之前已經註冊,並使用Facebook重新登錄。他的Facebook電子郵件也是[email protected]在流星中使用OAUTH處理重複帳戶的實用方法?

所以現在我們有了一個擁有兩個不同賬戶的人。這很糟糕和混亂,特別是如果用戶使用Facebook登錄並且無法找到他的用戶數據,例如他在電子郵件/密碼系統下創建的訂單歷史記錄。

是否有一個包允許用戶混合和匹配登錄方法,但仍然保持連續性?

我不喜歡OAUTH用戶將他們的電子郵件埋在services.google/facebook.email之內,而是希望它只在正常的emails陣列中。

var returnUserEmail = function(userDoc){ 
    if(userDoc.services.google){ 
     return userDoc.services.google.email; 
    } else if (userDoc.services.facebook){ 
     return userDoc.services.facebook.email; 
    } else { 
     return userDoc.emails[0].address; 
    }; 
}; 

Accounts.onCreateUser(function(options, user) { 

    console.log("user created! ", user); 

    if (!user.emails){ 
     var email = returnUserEmail(user); 
     user.emails = []; 
     user.emails[0] = {}; 
     user.emails[0].address = email; 
     user.emails[0].verified = true; 
     // This function simply updates the user document 
     updateCollectionDocument(Meteor.users, user); 
    }; 

    return user; 

}); 

有了這個位代碼運行,如果用戶註冊後首先使用電子郵件/密碼,然後嘗試註冊使用Facebook的,登錄屏幕會給他一個錯誤消息說,電子郵件已經存在。而現在他不能享受與Facebook登錄的好處。

所以現在有什麼東西不適合我。是否有邏輯流程,我可以讓所有這些登錄/註冊方法一起工作,但也保持連續性?

回答

2

你要找的這個包https://github.com/splendido/meteor-accounts-meld

賬戶,MELD試圖解決以下幾個方面:用相同的電子郵件地址註冊可以存在

  1. 沒有兩個賬戶

  2. 許多不同的第三方登錄服務可能與相同的 用戶相關聯帳戶

  3. 在不同時間創建的不同帳戶可能需要融合到同一電子郵件地址 。

我以前用它和它的偉大工程,我的工作流程是迫使電子郵件確認(重要的),其帳戶MELD後,可以合併使用相同的電子郵件帳戶之一,用戶可以使用社交登錄。 (也可以詢問用戶是否想要這樣做)

0

我以前遇到過這種情況。我提出了以下模式。

  1. 如果用戶已登錄,使用$更新操作綁定Facebook來user.services
  2. 如果用戶沒有登錄,請嘗試從Facebook資料複製電子郵件創建一個新帳戶user.emails和你一樣。如果電子郵件已經存在,用戶會收到警告,但我認爲這是可以接受的。