如果用户名存在,我想停止注册过程。如果用户名存在,我不想创建电子邮件\密码(身份验证)和其他信息
数据库规则:
{
"rules": {
"users": {
".read": "(auth != null)",
".indexOn": ["username"],
"$uid": {
"$username":{
".write": "(auth != null) && !data.exists() || newData.exists()"
}
}
}
}
}
我在.write中添加了!data.exists()
,但它仍然重复了用户名。
然后我添加".validate"
以使用户名至少为3个字符,看看注册过程是否会失败,如果它更长,但它创建了电子邮件\密码和其他东西,但没有在数据库root中写入任何数据\用户\
在使用email \ password注册新用户后,我收到此错误,这意味着用户名不能超过3个字符。 如何在这种情况下停止注册过程并显示警告消息?
[Firebase /数据库] [I-RDB03812] setValue:或removeValue:at / users / jt94ARqOoodtU3kYp3W1MtlUZ4m1 failed:permission_denied
如果你能解决问题,请帮助我。
答案 0 :(得分:1)
您的简化规则是:
{
"rules": {
".write": "(auth != null)",
"users": {
"$uid": {
"username": {
".write": "auth != null && (!data.exists() || !newData.exists())",
因此,您首先在数据的根目录上授予任何经过身份验证的用户写访问权限,然后说用户只能在当前位置没有数据的情况下进行写入。
这不起作用:一旦你在某个级别授予权限,就不能在较低级别上取消该权限。
Firebase文档将其描述为Read and Write rules cascade:
子规则只能为父节点已声明的内容授予其他权限。他们无法撤销读取或写入权限。