【发布时间】:2016-12-13 12:45:48
【问题描述】:
我是 Firebase 的新手。我已经建立了一个 firebase 实时数据库,如果读写规则设置为 true,则可以对其进行读写。
我的身份验证有问题。我已经为谷歌和电子邮件加上密码设置了身份验证。
我的目标是允许任何用户读取数据,但只有一个用户(我自己)可以在使用单个电子邮件地址和密码登录后写入数据。
如果我使用 google 登录(规则设置为:auth != null),我可以成功地读取和写入数据库。
如果我使用电子邮件地址和密码登录,我也可以使用相同的规则(auth != null)读取和写入数据库。
我不知道如何将其设置为仅允许使用电子邮件地址和密码登录的单个用户进行写访问。
我已经尝试在规则中包含一个用户节点,但是在使用模拟器时我无法访问(见下文),并且我不知道如何在构建时包含 uid(我可以在登录后获得)参考 - 这是我当前使用的参考(适用于设置为 true 的读写规则):
DatabaseReference databaseReference = mRootReference.child("Action_helper/1/Action_table_of_contents");
我没有在我的数据库中包含用户节点,因为我假设这是由 firebase 身份验证处理的。
这是我的数据布局:
我已经尝试过使用各种规则选项的模拟器。在模拟器中使用这些设置测试访问(选择自定义提供程序选项):
Auth {"provider" : "firebase", "uid" : "Rp3OgoaABMN3hqTv0aF29ECQRCQ2"}
注意:使用我在 Firebase 身份验证中设置的电子邮件地址和密码登录后,我从 Firebase 对象获取提供程序和 uid:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
userId = user.getUid();
String provider = user.getProviderId();
我希望在 1) 制定我的规则、2) 我是否应该以及如何更改我的数据结构以及最后 3) 如何将 uid 包含在数据库引用中,我将使用它来将数据写入数据库。
谢谢
【问题讨论】:
标签: firebase firebase-realtime-database firebase-security