Javascript 检查注册时firestore auth中是否已存在电子邮件(Angular)

Javascript 检查注册时firestore auth中是否已存在电子邮件(Angular),javascript,node.js,angular,firebase,google-cloud-firestore,Javascript,Node.js,Angular,Firebase,Google Cloud Firestore,当用户注册我们的应用程序时,我想让他们知道他们试图注册的电子邮件是否已经存在,而无需提交表单(即电子邮件字段模糊)。目前,用户必须输入他们的详细信息并单击“注册”,然后才能让他们知道电子邮件是否已收到 通过输入电子邮件的spotify注册,您可以观察到所需的行为,并且只要单击“离开”,您就会看到以下内容: 到目前为止,我已经编写了一个在blur上触发的云函数(http),该函数从firestore admin auth调用getUserByEmail函数。功能如下: export const

当用户注册我们的应用程序时,我想让他们知道他们试图注册的电子邮件是否已经存在,而无需提交表单(即电子邮件字段模糊)。目前,用户必须输入他们的详细信息并单击“注册”,然后才能让他们知道电子邮件是否已收到

通过输入电子邮件的spotify注册,您可以观察到所需的行为,并且只要单击“离开”,您就会看到以下内容:

到目前为止,我已经编写了一个在blur上触发的云函数(http),该函数从firestore admin auth调用
getUserByEmail
函数。功能如下:

export const checkUserEmail = https.onRequest((req, res) => {
    corsHandler(req, res, async () => {
        try {
            const email = req.body.email;
            await admin.auth().getUserByEmail(email);

            res.send({status: 200});
            return;
        } catch(e) {
            return Helpers._handleError(res, 400, e.message);
        }
    })
});
这确实有效,因为我现在可以检查电子邮件是否存在,但问题是验证需要3-10秒(足够长的时间让用户深入注册过程)

有没有办法:

  • 加快云计算功能或
  • 验证用户是否已使用firestore客户端直接提供的电子邮件进行身份验证

  • 提前感谢

    您可以使用
    用户
    集合,您可能已经在使用了。这可以存储用户信息,并且经常被证明是真正可以处理的,因为auth用户不能用字段更新,它不知道如何开箱即用


    您可以在此处存储用户的电子邮件,并与此处的
    用户
    集合的电子邮件字段相比,检查该集合中的用户输入。

    您可以使用
    用户
    集合,您可能已经在这样做了。这可以存储用户信息,并且经常被证明是真正可以处理的,因为auth用户不能用字段更新,它不知道如何开箱即用


    您可以在此处存储用户的电子邮件,并与
    用户
    集合的电子邮件字段相比,检查集合中的用户输入。

    是的,因此我们有一个用户集合,就像您所说的,它将电子邮件存储在其他信息中-问题是我想检查firestore身份验证选项卡中是否存在该用户对于额外的安全性,我认为如果您现在在onRequest云函数中这样做,并且只返回
    true
    false
    ,那么在安全性方面没有什么不同。无论哪种方式,您都可以知道您的数据库是否包含与电子邮件相关的帐户。是的,我们确实有一个用户集合,就像您所说的,它将电子邮件存储在其他信息中-问题是,我想检查用户是否存在于firestore身份验证选项卡中,以获得额外的安全性。我想,如果您现在在onRequest云函数,只返回
    true
    false
    ,在安全性方面没有太大区别。无论哪种方式,您都可以知道数据库是否包含与电子邮件相关的帐户。异步验证器应该非常快速,您不需要云功能。但是,让用户知道电子邮件已被接收可能会被视为安全风险。你让攻击者知道电子邮件是有效的,不像发送一个通用错误消息。也许你可以考虑这个问题:@ Ajt88-这是一个奇妙的解决方案!谢谢,异步验证器应该非常快,您不需要云函数。但是,让用户知道电子邮件已被接收可能会被视为安全风险。你让攻击者知道电子邮件是有效的,不像发送一个通用错误消息。也许你可以考虑这个问题:@ Ajt88-这是一个奇妙的解决方案!非常感谢。