帐户 - 不合作

时间:2014-06-23 15:45:12

标签: javascript jquery meteor

账户融合对我不起作用,如果它能解决问题,还是我需要做些什么?我正在使用自己的ui并使用Meteor.loginWithXX()进行Facebook和Twitter。我尝试手动创建帐户,然后使用第三方登录,但它只是创建了一个新用户并且没有合并它们。

我做错了吗?

我正在使用

配置我的服务
Accounts.loginServiceConfiguration.insert({
    "service": "facebook",
    "appId": "XXXXXXXXXXXX",
    "secret": "XXXXXXXXXXXX"
});

Accounts.loginServiceConfiguration.insert({
    "service": "twitter",
    "consumerKey": "XXXXXXXXXXXX",
    "secret": "XXXXXXXXXXXX"
});

然后我使用Meteor.loginWithFacebook();和Meteor.loginWithTwitter();

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

让我发布我正在使用的代码,您可以告诉我它是否有用。它不是我的代码,而是从其他答案中熠熠生辉,但是从我这么多的答案中我无法提供来源。

您有权使用服务配置来设置每项服务,但如果您尚未安装该软件包,则需要安装该软件包。

然后我为我提供的每个登录服务添加了一个类似于此的事件。

Template.login.events({
  "click #loginWithFacebook": function (event) {
    event.preventDefault();
    Meteor.loginWithFacebook({

    }, function(error) {
      if (error) {
        console.log(error);
      }
    });
  }
});

然后我还有一个onCreateUser代码块,它会检查它是否是新用户,或者他们是否只是使用新服务作为他们的登录提供者。这已被调整了一点,所以你需要拿出那些不相关的东西。

Accounts.onCreateUser(function(options, user) {
  var email, oldUser, service; 

  if (user.profile == null) {
    user.profile = {};
    if (options.profile != null) {
      user.profile.name = options.profile.name;
      user.profile.organisation = options.profile.organisation;
    }
  }

  if (user.services != null) {
    service = _.keys(user.services)[0];
    email = user.services[service].email;
    if (email != null) {
      oldUser = Meteor.users.findOne({
        "emails.address": email
      });
      if (oldUser != null) {
        if (oldUser.services == null) {
          oldUser.services = {};
        }
        if (service === "google" || service === "facebook") {
          oldUser.services[service] = user.services[service];
          Meteor.users.remove(oldUser._id);
          user = oldUser;
        }
      } else {
        if (service === "google" || service === "facebook") {
          if (user.services[service].email != null) {
            user.emails = [
              {
                address: user.services[service].email,
                verified: true
              }
            ];
          } else {
            throw new Meteor.Error(500, "" + service + " account has no email attached");
          }
          user.profile.name = user.services[service].name;
          user.profile.organisation = Organisations.find({}, {'fields': {'_id':1}}).fetch()[0];
        }
      }
    }
  }
  return user;
});