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