以用户身份登录我的应用程序时,我希望所述用户可以访问他们自己的特定维护记录。据推测,这可以使用用户使用Firebase Auth签署应用程序后生成的UID来完成。
MaintenanceActivity
private boolean updateMaintenance(String title, String desc, String id, String primary, String secondary, String property) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("maintenance").child(id);
Maintenance maintenance = new Maintenance (id, title, desc, primary, secondary, property);
databaseReference.setValue(maintenance);
Toast.makeText(this, "Maintenance Updated Updated Successfully", Toast.LENGTH_LONG).show();
return true;
}
private void addMaintenance(){
String title = editTextTitle.getText().toString().trim();
String desc = editTextDesc.getText().toString().trim();
String primary = spinnerPrimary.getSelectedItem().toString();
String secondary = spinnerSecondary.getSelectedItem().toString();
String property = spinnerProperty.getSelectedItem().toString();
if(!TextUtils.isEmpty(title)){
String id = databaseMaintenance.push().getKey();
Maintenance maintenance = new Maintenance (id, title, desc, primary, secondary, property);
databaseMaintenance.child(id).setValue(maintenance);
Toast.makeText(this, "Maintenance Added", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "You must enter a maintenance record", Toast.LENGTH_LONG).show();
}
}
LoginActivity
这是我目前实施的内容。目前,我可以使用Firebase存储的凭据登录,但始终会显示Firebase数据库中保存的维护记录。无论谁登录。
Auth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
数据库规则
我已将数据库规则设置如下:
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid",
".read": "$uid === auth.uid"
}
}
}
}
当前的Firebase数据库
这些是以任何用户身份登录时显示的维护案例。
不确定此处是否需要维护活动代码,如果是,则确定哪些部分。
对此的任何帮助都将受到大力赞赏,现在已经坚持了很长时间。
非常感谢。
答案 0 :(得分:0)
仅获取firebase中登录的用户记录..
首先在Firebase控制台中添加安全规则。
match /databases/{database}/documents {
match /maitenance/{userId} {
allow read, write: if request.auth.uid == userId;
}
}
然后,您需要添加用户ID节点作为维护节点的子节点,用户维护记录应该是登录用户ID节点的子节点。
最后,在read操作中传递用户id以获取用户id的维护记录。
firestoreDB.collection("maintenance")
.whereEqualTo("userId", userId)
.get()
请查看user specific data is saved in and fetched from firestore database的方式。您也可以使用实时数据库。