Firebase 数据库 - 为数据库中的用户设置规则
Posted
技术标签:
【中文标题】Firebase 数据库 - 为数据库中的用户设置规则【英文标题】:Firebase Database - Set rules for users in the database 【发布时间】:2020-12-29 16:53:21 【问题描述】:现在我有了这些规则
"rules":
"users":
"$uid":
".write": "$uid == auth.uid",
".read": "auth != null && auth.uid == $uid"
授权时,我沿着这条路径向数据库写入数据
在应用程序中,我想显示所有用户的电子邮件,但没有显示任何内容。
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read);
listView = findViewById(R.id.textView);
listData = new ArrayList<>();
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
listView.setAdapter(adapter);
mDatabase = FirebaseDatabase.getInstance().getReference();
mAuth = FirebaseAuth.getInstance();
getDatafromDB();
private void getDatafromDB()
ValueEventListener valueEventListener = new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
if (listData.size() > 0) listData.clear();
for (DataSnapshot ds: dataSnapshot.child("users").getChildren())
User user = ds.getValue(User.class);
assert user != null;
listData.add(user.email);
adapter.notifyDataSetChanged();
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
;
mDatabase.addValueEventListener(valueEventListener);
如果我写初始规则,
"rules":
".write": "false",
".read": "true"
然后显示所有内容。基于此,我得出结论,我设置的规则不正确。怎么做才对?
【问题讨论】:
android-studio
标签仅在您的问题与 IDE 相关时使用,仅仅因为您使用的是 android studio 并不意味着您应该将其作为标签添加到您的问题中,所以我已经删除了:)
好的,现在我知道了
没问题,这是一个常见的错误,祝你好运找到答案,不幸的是我无能为力:)
【参考方案1】:
通过如下设置规则:
"rules":
"users":
"$uid":
".write": "$uid == auth.uid",
".read": "auth != null && auth.uid == $uid"
用户只能读取与他/她的用户 UID 对应的数据库节点。有关详细信息,请参阅doc。
您没有详细说明要实现哪些确切的访问权限(所有用户都可以读取整个users
节点?只有经过身份验证的用户才能读取整个users
节点?等等...)但您需要相应地调整您的规则。
PS:另外,别忘了rules are not filters。
根据您的评论更新
是的,如果您想检查,在您的规则中,用户已验证他/她有权访问电子邮件地址,您会这样做... auth.token.email_verified == true
。有关详细信息,请参阅此doc。
【讨论】:
是的,我已经知道了。所有用户都必须能够读取和写入用户分支。为此,我需要设置类似这样的规则,以便经过验证的用户可以编辑分支? "auth != null && auth.token.email_verified == true" 感谢“规则不是过滤器”链接。现在我明白了我的错误 您好@КириллХимов,我的回答对您有帮助吗?您可以接受并投票,请参阅***.com/help/someone-answers。谢谢。 对不起,我忘了以上是关于Firebase 数据库 - 为数据库中的用户设置规则的主要内容,如果未能解决你的问题,请参考以下文章
Firebase会恢复单个文本数据并将其设置为textview
如何根据数据库用户 id(不是 uid)设置 firebase 规则
当请求中的 nodeId 与数据库中的 nodeId 匹配时,我可以将 Firebase 实时数据库规则设置为只读吗
新的 Flutter/Dart 程序员 有没有简单的方法可以简单地访问 Firebase 数据库中的“字段”并将其值设置为变量?