Android Firebase 数据库检查用户是否在组中
Android Firebase Database Check if User is in Group
您好,搜索了很多但找不到任何与我的主题相关的问题/或已回答。
我正在使用具有这些结构的 Firebase 数据库(来自 firebase 官方文档)
// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}
Docu 说:检查 /$uid/groups/$group_id 是否为 null
This approach, inverting the data by listing the IDs as keys and setting the value to true, makes checking for a key as simple as reading /users/$uid/groups/$group_id and checking if it is null. The index is faster and a good deal more efficient than querying or scanning the data.
但是我如何在 Java 代码中管理它?
有这样的东西吗?
mDatabase.child("table/foo").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//
在这个查询之后我需要一个简单的 true 或 false
if(query) {
user is in Group
... else {
User is not in group
只是或更好地突出显示
密钥是我的用户ID
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference memberDatabaseReference = rootRef.child("groups").child(groupName).child("members").child(key);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
Log.d("TAG", "Member does not exist!");
} else {
Log.d("TAG", "Member exists!");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
memberDatabaseReference.addListenerForSingleValueEvent(valueEventListener);
您需要对 dataSnapshot
对象使用 exists()
方法。所以,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference memberDatabaseReference = rootRef.child("groups").child(groupName).child("members").child(memberName);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
Log.d("TAG", "Member does not exist!");
} else {
Log.d("TAG", "Member exists!");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
memberDatabaseReference.addListenerForSingleValueEvent(valueEventListener);
其中mamberName
为您要验证的会员名称。这样你就可以验证一个成员的存在。
希望对您有所帮助。
像这样在您的 firebase 安全性中创建一个节点
{
"rules":{
"checkIfMemberIsInGroup":{
"$groupId":{
"$memberId":{
".read":false,
".write":"auth != null && !newData.exists() &&
root.child('groups').child($groupId).child('members').child($memberId).exists()"
}
}
}
}
然后用轻量查询检查用户是否属于组,让服务器占用带宽..
FirebaseDatabase.getInstance().getReference().child("checkIfMemberIsInGroup")
.child(groupName)
.child(memberName)
.setValue(null, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null && databaseError.getCode() == DatabaseError.PERMISSION_DENIED) {
// user is not member of group
} else {
// user is member of group
}
}
});
您好,搜索了很多但找不到任何与我的主题相关的问题/或已回答。
我正在使用具有这些结构的 Firebase 数据库(来自 firebase 官方文档)
// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}
Docu 说:检查 /$uid/groups/$group_id 是否为 null
This approach, inverting the data by listing the IDs as keys and setting the value to true, makes checking for a key as simple as reading /users/$uid/groups/$group_id and checking if it is null. The index is faster and a good deal more efficient than querying or scanning the data.
但是我如何在 Java 代码中管理它?
有这样的东西吗?
mDatabase.child("table/foo").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//
在这个查询之后我需要一个简单的 true 或 false
if(query) {
user is in Group
... else {
User is not in group
只是或更好地突出显示
密钥是我的用户ID
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference memberDatabaseReference = rootRef.child("groups").child(groupName).child("members").child(key);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
Log.d("TAG", "Member does not exist!");
} else {
Log.d("TAG", "Member exists!");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
memberDatabaseReference.addListenerForSingleValueEvent(valueEventListener);
您需要对 dataSnapshot
对象使用 exists()
方法。所以,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference memberDatabaseReference = rootRef.child("groups").child(groupName).child("members").child(memberName);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
Log.d("TAG", "Member does not exist!");
} else {
Log.d("TAG", "Member exists!");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
memberDatabaseReference.addListenerForSingleValueEvent(valueEventListener);
其中mamberName
为您要验证的会员名称。这样你就可以验证一个成员的存在。
希望对您有所帮助。
像这样在您的 firebase 安全性中创建一个节点
{
"rules":{
"checkIfMemberIsInGroup":{
"$groupId":{
"$memberId":{
".read":false,
".write":"auth != null && !newData.exists() &&
root.child('groups').child($groupId).child('members').child($memberId).exists()"
}
}
}
}
然后用轻量查询检查用户是否属于组,让服务器占用带宽..
FirebaseDatabase.getInstance().getReference().child("checkIfMemberIsInGroup")
.child(groupName)
.child(memberName)
.setValue(null, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null && databaseError.getCode() == DatabaseError.PERMISSION_DENIED) {
// user is not member of group
} else {
// user is member of group
}
}
});