【问题标题】:Prevent default duplicate email rejection in Meteor account creation在创建 Meteor 帐户时防止默认的重复电子邮件拒绝
【发布时间】:2015-09-29 06:44:12
【问题描述】:

我正在构建一个具有两种类型用户的应用程序。专业用户及其客户。帐户类型完全不同,没有重叠。因此,注册为 Pro 的电子邮件仍可用于注册为客户,如果 Pro 用户尝试使用客户端表单登录,他们的帐户将不存在。

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

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;    

});

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

【问题讨论】:

  • 您真的需要或想要单独的用户文档吗?在用户对象 isPro 和 isClient 中有 2 个标志会有什么问题?您可以通过 Accounts.createUser 函数客户端传入 isPro 或 isClient 标志,具体取决于用户注册的位置或他们选择的选项。然后,一旦他们注册,您就可以选择让他们在某个地方成为另一种类型的用户。也许这不合适,但我只是认为即使为同一个人提供 2 个单独的文档,您也会遇到问题。
  • 这可行,但在我看来并不理想。专业用户和客户用户是完全不同的。客户端用户永远不会转换为专业用户,反之亦然。我认为最简单的情况是为每种用户类型创建一个完全独立的数据库表。我只是不确定这是否可能,所以我试图让它发挥作用。
  • 我只是认为这可能有问题。如果用户是具有 2 个帐户的客户和专业人士,并且他们使用相同的电子邮件地址和相同的密码(很可能),那么当他们登录时,您如何知道应该登录哪个帐户?无论如何,我看不到将专业或客户端登录信息传递给 Meteor.loginWithPassword 函数。此外,如果专业人士想查看他们的客户资料,他们需要退出并重新登录,对吗?也许您可以有 2 个集合 Clients 和 Professionals 并将用户的 _id 存储在其中。这样,您只有 1 个用户文档,但您的 2 个集合
  • 感谢您的意见。它可以工作。我得考虑一下!

标签: javascript meteor accounts


【解决方案1】:

您可以在 mongo shell 中执行此操作

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

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

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2016-12-17
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多