在我的meteor-angular应用程序中,我有2个帐户登录配置: Facebook和谷歌
现在,假设用户A使用他的Facebook帐户登录。 登录后,我将用户发送到其他表单页面以插入其社交ID(此表单页面仅向用户显示一次)。
所以现在我有了一个用户对象(Meteor.user()
+他的社交ID)。
用户正在使用该应用程序并插入其资产。
现在用户决定退出。
过了一会儿,他回到了应用程序,这次他用他的谷歌帐户登录。所以现在他将被重定向到"插入社交ID"自从在DB中创建新用户以来,页面形式再次出现。
有没有办法绑定这两个用户?我有一个唯一的标识符(社交ID),可以帮助我合并它们,但没有办法做这种绑定......
我需要绑定,因为如果他以不同的身份登录,他就无法编辑他的资产......
10倍
答案 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