使Firebase数据库特定于用户

时间:2017-01-04 20:51:20

标签: android firebase firebase-realtime-database

我已经使用Firebase实现了身份验证过程,我的用户现在应该可以添加数据并将其显示在用户特定的比例上(每个用户都有自己的数据)。

根据我的阅读,我可以将数据添加到数据库中:

 private void setData() {
    // Write a message to the database
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("Message");

    myRef.setValue("Hello World !");
}

但是在控制台中,所有用户都可以访问数据,Firebase数据库是否应该用于存储用户特定数据?如果是这样,那怎么可能实现呢?

打扰一下,如果我的问题很明显,但我对这些原则并不熟悉。

1 个答案:

答案 0 :(得分:2)

为每个用户创建唯一标识符,并在该唯一标识符下托管每个用户的数据。可以使用您喜欢的任何方法(例如设备的UDID)或通过简单地获取经过身份验证的用户的firebase uid来创建唯一ID。例如,如果您想要在没有Firebase的情况下访问uid,则可能会有以下情况。

private void setData() {
  String uniqueId = java.util.UUID;
  FirebaseDatabase database = FirebaseDatabase.getInstance();
  DatabaseReference myRef = database.getReference("Message");
  myRef.child(uniqueId).setValue("Hello World !");
}

但是,建议使用通过Firebase身份验证生成的uid。第一个示例中断的情况是,如果同一用户使用同一帐户登录到两个不同的设备,这将阻止他们从原始设备访问他们自己的数据,因为每个设备将具有不同的uuids。另一方面,Firebase uid在每个设备上都是相同的,因此两个设备上的同一用户可以访问相同的数据。如果你想访问firebase uid(推荐):

private void setData() {
  FirebaseUser user = firebaseAuth.getCurrentUser();
  String uniqueId = user.getUid()
  FirebaseDatabase database = FirebaseDatabase.getInstance();
  DatabaseReference myRef = database.getReference("Message");
  myRef.child(uniqueId).setValue("Hello World !");
}