java - 如何使用 Firestore 仅存储当前登录用户的数据
问题描述
下面是允许用户将数据存储到 Firestore 的代码。问题是,所有登录到应用程序的用户都可以查看上传的数据。我怎样才能只允许当前登录的用户只为他们的帐户存储数据?
对于 Firebase 数据库,我使用以下代码(有效,但不适用于 Firestore)
FirebaseUser 用户= FirebaseAuth.getInstance().getCurrentUser(); 字符串 userId=user.getUid(); mDatabaseRef = FirebaseDatabase.getInstance().getReference(FB_DATABASE_PATH).child(userId);
上述代码行允许仅为登录用户存储和检索数据。因此,数据仅对他们来说是唯一的。
如何为 Firestore 复制它?
fetch=findViewById(R.id.fetchDocument);
firestore = FirebaseFirestore.getInstance();
upload =findViewById(R.id.uploadText);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
POJO pojo = new POJO();
pojo.setValue("Hello World");
//below code creates collection, creates a inner doc. and uploads the value (pojo)
firestore.collection("RootCollection").document("MyDoc")
.set(pojo).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//gets called if upload is successful
Toast.makeText(ichild.this,"Upload is successful", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(ichild.this,"Upload is not successful" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
fetch.setOnClickListener(new View.OnClickListener() {
解决方案
如何使用 Firestore 仅存储当前登录用户的数据
如果将 传递uid
给该document()
方法,则可以实现相同的目的。因此 Firebase 实时数据库中使用了以下代码行:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
mDatabaseRef = FirebaseDatabase.getInstance().getReference(FB_DATABASE_PATH).child(userId);
在 Firestore 中等效于:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference uidRef = rootRef.collection("users").document(uid);
POJO pojo = new POJO();
uidRef.set(pojo);
推荐阅读
- rust - 使用 rust 项目构建电子时遇到问题
- c# - 使用 c# 运行简单的 web 服务程序时 WcfTestClient 未打开,而是打开网页 - c# 编程新手
- java - 如何将数据从一个jsp表单传输到另一个
- java - Spring - 将图像作为字节数组存储在数据库中并检索它们
- jsp - 如何从 jsp 中的选择标记中维护选定的选项?
- sql - 选择带有“is null”子句的查询和子选择/左连接不返回任何结果
- java - 我无法使用 Selenium WebDriver 在 MakeMyTrip 网站中选择“来自城市”。输入文本“che”不选择指定城市
- reactjs - 使用 {react-select} 时无法读取未定义的属性“名称”
- android - 如何在将图像上传到服务器之前降低图像质量
- android - 如何编写一个“模块”来扩展现有的移动应用程序?