gpt4 book ai didi

javascript - #AskFirebase : Is there a built-in method for securely checking for and existing User e-mail in Firebase?

转载 作者:行者123 更新时间:2023-11-30 14:21:53 25 4
gpt4 key购买 nike

是否有一种内置方法可以在不将您的“用户”集合暴露给未经身份验证的用户的情况下检查用户是否存在? (只读访问仍然会暴露整个用户集合。)下面是传统的解决方案:

  usersRef.child('users').child(userId).once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
});

我的用例是一个包含多个步骤的注册流程。我想在候选人到达最后一步之前检查用户是否存在。

关于如何解决此问题,我最初的想法是创建一个管理服务,该服务可以返回结果,同时限制来自单个用户的查询(类似于内置登录逻辑如何限制多次无效重试)。

我知道从 createUserWithEmailAndPassword 返回的“auth/email-already-in-use”错误代码。但是,需要在提供密码之前执行检查。

在我开始敲定服务之前确保它不存在 ;)

最佳答案

为了能够检查某个节点是否存在,您必须能够读取该节点。如果我们专门查看您的代码:

usersRef.child('users').child(userId).once('value', ...

此代码要求用户具有对 /users/$userId 的读取权限。它要求他们有权访问所有/users

如果您创建一个顶级 emails 节点,您将在其中保留已在使用的电子邮件,这也是一样的。要检查特定电子邮件是否已在使用中,用户只需访问 /emails/$email,他们不需要访问 /emails

所以:

{
"rules": {
"users": {
"$uid": {
".read": "auth.uid !== null"
}
},
"emails": {
"$email": {
".read": "auth.uid !== null"
}
}
}
}

这些规则的重要之处在于,任何试图从 /users/emails 读取信息的人都将被拒绝,因此他们无法访问列表所有用户或电子邮件。但是给定个人 UID 或电子邮件地址,他们可以检查是否已经声明。

请注意,敲定自己的服务也很好。但是,如果基本用例是安全地检查特定 UID/电子邮件是否已被认领,您可能只使用数据库就可以了。

关于javascript - #AskFirebase : Is there a built-in method for securely checking for and existing User e-mail in Firebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com