在Meteor中使用OAUTH处理重复帐户的实用方法?

时间:2015-07-06 02:52:26

标签: meteor

说我在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登录的好处。

所以现在有些事情对我不适合。有没有一个逻辑流程,我可以让所有这些登录/注册方法一起工作,但也保持连续性?

2 个答案:

答案 0 :(得分:2)

您正在寻找此套餐https://github.com/splendido/meteor-accounts-meld

  

accounts-meld试图解决以下问题:

     
      
  1. 没有两个使用相同电子邮件地址注册的帐户可以存在

  2.   
  3. 许多不同的第三方登录服务可以与之相关联   用户帐户

  4.   
  5. 在不同时间创建的不同帐户   可能/应该将相同的电子邮件地址融合在一起。

  6.   

我之前使用过它并且工作得很好,我的工作流程是强制进行电子邮件验证(重要)之后,帐户融合可以将相同的电子邮件合并到一个帐户,用户可以使用社交登录。 (也可以询问用户是否愿意这样做)

答案 1 :(得分:0)

我之前遇到过这种情况。我想出了以下模式。

  1. 如果用户已登录,请使用$ update操作将Facebook绑定到 user.services
  2. 如果用户未登录,请尝试通过将电子邮件从Facebook文档复制到 user.emails 来创建新帐户。如果电子邮件已经存在,将会警告用户,但我认为这是可以接受的。