流星中的多个帐户

时间:2016-04-19 10:07:34

标签: meteor meteor-accounts

在我的meteor-angular应用程序中,我有2个帐户登录配置: Facebook和谷歌

现在,假设用户A使用他的Facebook帐户登录。 登录后,我将用户发送到其他表单页面以插入其社交ID(此表单页面仅向用户显示一次)。

所以现在我有了一个用户对象(Meteor.user() +他的社交ID)。

用户正在使用该应用程序并插入其资产。

现在用户决定退出。

过了一会儿,他回到了应用程序,这次他用他的谷歌帐户登录。所以现在他将被重定向到"插入社交ID"自从在DB中创建新用户以来,页面形式再次出现。

有没有办法绑定这两个用户?我有一个唯一的标识符(社交ID),可以帮助我合并它们,但没有办法做这种绑定......

我需要绑定,因为如果他以不同的身份登录,他就无法编辑他的资产......

10倍

2 个答案:

答案 0 :(得分:3)

使用onCreateUser回调。查找已注册的具有该社交ID的用户,如果存在,则只需将新服务对象添加到现有用户文档中。

Accounts.onCreateUser(function (options, user) {
  // Find an existing user based on social ID
  let registeredUser = Meteor.users.findOne(...); 

  if(registeredUser) {
    let googleProfile = user.services.google;

    if (googleProfile) {
      // Add Google login credentials to the user document in Mongo
      Meteor.users.update({...}, {$set: {"services.google": googleProfile});
    }

    // throw an Error here to stop creating a new user.
  }

  // Returning a user object will create a new one in Mongo.
  return user;
});

免责声明:我通常建议反对合并用户。请注意,窃取您的Facebook密码的恶意攻击者也可能窃取您在此服务中的数据,即使您只是使用Google注册。

答案 1 :(得分:0)

有一个名为 splendido:accounts-meld 的软件包,用于合并来自同一电子邮件的所有用户社交信息,并将用户与该已验证的电子邮件合并。

您可以在github存储库中找到更多详细信息:https://github.com/splendido/meteor-accounts-meld