Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor用户帐户仅通过电子邮件注册1个用户_Meteor - Fatal编程技术网

Meteor用户帐户仅通过电子邮件注册1个用户

Meteor用户帐户仅通过电子邮件注册1个用户,meteor,Meteor,我正在使用Meteor用户帐户,并提供多种服务(谷歌、facebook等) 我不明白为什么当我用相同的电子邮件地址在谷歌和facebook注册时,mongodb会创建两个不同的帐户 我正在使用默认的Meteor用户帐户设置 (我没有代码向您展示)Meteor不会根据电子邮件地址合并来自不同服务的用户帐户。如果用户的登录凭据尚未出现在数据库中,则会创建一个新用户。自动合并Facebook、Google和电子邮件/密码凭据是一个潜在的安全漏洞 但是,我相信可以手动合并它们。登录凭据存储在db.use

我正在使用Meteor用户帐户,并提供多种服务(谷歌、facebook等)

我不明白为什么当我用相同的电子邮件地址在谷歌和facebook注册时,mongodb会创建两个不同的帐户

我正在使用默认的Meteor用户帐户设置


(我没有代码向您展示)

Meteor不会根据电子邮件地址合并来自不同服务的用户帐户。如果用户的登录凭据尚未出现在数据库中,则会创建一个新用户。自动合并Facebook、Google和电子邮件/密码凭据是一个潜在的安全漏洞


但是,我相信可以手动合并它们。登录凭据存储在
db.users.services
文档中,每个用户应该可以有多个登录方法。但是我不建议这样做。

如果您想确保同一封电子邮件不会被使用两次,您可以这样做:

Accounts.onCreateUser(function(options, user) {
  var service, serviceName;
  if (!user.profile) {
    user.profile = options.profile || {};
  }

  if(user.services) {
    // Get first service
    serviceName = _.keys(user.services)[0];
    user.meta.service = serviceName;

    if (!user.emails || !user.emails.length) {
      if(serviceName === "facebook" || serviceName === "google") {
        service = user.services[serviceName];
        user.emails = user.emails || [];

        user.emails[0] = {
          address: service.email,
          verified: service.verified_email
        };

      }
    }
  }

  return user;
});

这将在用户的“电子邮件”字段中添加提供商的电子邮件字段,并防止用户使用两个不同的帐户注册两次。

为什么不推荐使用此字段?例如,如果您使用电子邮件和密码注册,而攻击者(例如)侵入了您的Facebook帐户,则他可以使用此帐户注册到该网站,因为合并而接管你的帐户。