账户融合对我不起作用,如果它能解决问题,还是我需要做些什么?我正在使用自己的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();
非常感谢任何帮助
答案 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;
});