#AskFirebase:Firebase 中是否有用于安全检查现有用户电子邮件的内置方法?
#AskFirebase: Is there a built-in method for securely checking for and existing User e-mail in Firebase?
是否有内置方法来检查用户是否存在,而不会将您的 'user' 集合暴露给未经身份验证的用户? (只读访问仍然会暴露整个用户集合。)下面是传统的解决方案:
usersRef.child('users').child(userId).once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
});
我的用例是一个包含多个步骤的注册流程。我想在候选人到达最后一步之前检查用户是否存在。
我对如何解决这个问题的最初想法是创建一个管理服务,它可以 return 结果同时限制来自单个用户的查询(类似于内置登录逻辑如何限制多个无效重试)。
我知道“auth/email-already-in-use”错误代码 return 来自 createUserWithEmailAndPassword
。但需要在提供密码前进行校验
在我开始敲定服务之前确保它不存在 ;)
为了能够检查某个节点是否存在,您必须能够读取该节点。如果我们专门查看您的代码:
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/email 是否已被声明,那么您可能只使用数据库就可以了。
是否有内置方法来检查用户是否存在,而不会将您的 'user' 集合暴露给未经身份验证的用户? (只读访问仍然会暴露整个用户集合。)下面是传统的解决方案:
usersRef.child('users').child(userId).once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
});
我的用例是一个包含多个步骤的注册流程。我想在候选人到达最后一步之前检查用户是否存在。
我对如何解决这个问题的最初想法是创建一个管理服务,它可以 return 结果同时限制来自单个用户的查询(类似于内置登录逻辑如何限制多个无效重试)。
我知道“auth/email-already-in-use”错误代码 return 来自 createUserWithEmailAndPassword
。但需要在提供密码前进行校验
在我开始敲定服务之前确保它不存在 ;)
为了能够检查某个节点是否存在,您必须能够读取该节点。如果我们专门查看您的代码:
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/email 是否已被声明,那么您可能只使用数据库就可以了。