2015-07-10 58 views
0

我正在构建具有两种类型用户的应用程序。专业用户及其客户。账户类型完全不同,不重叠。因此,注册为Pro的电子邮件仍然可以用于注册为客户端,并且如果Pro用户尝试使用客户端表单登录,则其帐户将不存在。防止在Meteor帐户创建中的默认重复电子邮件拒绝

问题: Meteor自动防止在创建用户帐户时使用重复的电子邮件。我的想法是使用自定义验证来允许行为,并基本上创建两组不同的用户。以下是我为“Pro”用户尝试的验证示例。

Accounts.onCreateUser(function(options, user) { 
var email = user.email; 
    if (Meteor.users.find({emails: email, isPro : true}).count() > 0) { 
     throw new Meteor.Error(403, "This email address is already registered"); 
    } 
    user.isPro = true; 
    return user;  

});

但流星仍然使用其默认的重复电子邮件拒绝代替。关于如何重写此行为的任何想法,还是有更好的方法来创建两个不同的用户集?

+0

您是否确实需要或想要单独的用户文档?在用户对象isPro和isClient中有两个标志会出现什么问题?您可以通过Accounts.createUser函数客户端传入isPro或isClient标志,具体取决于用户注册或选择的选项。然后,一旦他们注册,你就有一个选择,让他们成为其他类型的用户。也许这不适合,但我认为即使可以通过为同一人提供两份单独的文件,您也会遇到问题。 – shambles

+0

这可以工作,但它不会在我的脑海中理想。专业用户和客户用户完全不同。客户用户永远不会转换为专业用户,反之亦然。我认为最简单的情况是为每个用户类型建立一个完全独立的数据库表。我只是不确定这是否可能,所以我试图让它工作。 –

+0

我只是觉得它可能有问题,但。如果用户是一个拥有2个账户的客户,并且他们使用相同的电子邮件地址和相同的密码(很可能),那么当他们登录时,您如何知道应该在哪个账户上签名?反正我没有看到通过pro或client登录到Meteor.loginWithPassword函数。另外,如果专业人士想要查看他们的客户资料,他们需要注销并重新登录。也许你可以有2个集合客户端和专业人士,并存储用户的_id。这样,你只有1个用户文档,但你的2个集合 – shambles

回答

0

您可以在蒙戈做这个壳

db.users.dropIndex('emails.address_1'); 

这样做可能不是最好的主意,并可能产生意想不到的后果。我也认为评论中讨论的解决方案会更好。

相关问题