假設我有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登錄的好處。
所以現在有什麼東西不適合我。是否有邏輯流程,我可以讓所有這些登錄/註冊方法一起工作,但也保持連續性?