说我在Meteor中拥有Facebook,Google和用户名/密码登录包。电子邮件为none@example.com
的用户使用此电子邮件和密码注册。然后他忘记了他之前已经注册,并使用Facebook再次注册。他的Facebook电子邮件也是none@example.com
。
所以现在我们有一个人有两个不同的帐户。这很糟糕且令人困惑,特别是如果用户使用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登录的好处。
所以现在有些事情对我不适合。有没有一个逻辑流程,我可以让所有这些登录/注册方法一起工作,但也保持连续性?
答案 0 :(得分:2)
您正在寻找此套餐https://github.com/splendido/meteor-accounts-meld
accounts-meld试图解决以下问题:
没有两个使用相同电子邮件地址注册的帐户可以存在
许多不同的第三方登录服务可以与之相关联 用户帐户
- 醇>
在不同时间创建的不同帐户 可能/应该将相同的电子邮件地址融合在一起。
我之前使用过它并且工作得很好,我的工作流程是强制进行电子邮件验证(重要)之后,帐户融合可以将相同的电子邮件合并到一个帐户,用户可以使用社交登录。 (也可以询问用户是否愿意这样做)
答案 1 :(得分:0)
我之前遇到过这种情况。我想出了以下模式。