他の人のメールにアクセスしようとしているユーザーに問題があります。私はE/ContactsFragment.java: Finding email failed. DatabaseError: Permission denied
を得ています。また、データベースに入る前に電子メールがチェックされ、入力した電子メールがデータベースのものと同じであることにも注意してください。 基本的に、私がしようとしているのは、user1
がuser2
のメールを見つけることです。そこから、私は電子メールで何かをします。Firebaseセキュリティ権限
{
"rules": {
"users":{
".indexOn": ["email"],
"$uid":{
".read": "auth !== null",
"email":{
".write": "auth !== null && $uid === auth.uid",
".validate": "newData.isString()"
}
}
}
}
}
はここで電子メールにアクセスしようとしている私のコードです:
final String TAG = "ContactsFragment.java";
FirebaseDatabase.getInstance().getReference().child("users").orderByChild("email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// some code
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG,"Finding email failed. " + databaseError);
}
});
私はそれを解決することができますか?私は何か重要なものを逃しています
'/ users'の下の子ノードへのユーザーの読み取りアクセスを拒否する唯一のものは、そのユーザーが認証されていない場合です(' '.read": "auth!== null" ')ので、データにアクセスする前にユーザーが認証されていることを確認する必要があります。 – Grimthorr
この機能はログインアクティビティの後に実行され、ユーザがログインアクティビティを通して自分自身を認証できたかどうかを確認できました。だから、私はそのユーザーが認証されていないとは思わない – CraftedGaming
さて、それは理にかなっています。 ['FirebaseAuth.getInstance().getCurrentUser()'](https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth)を実行することで、ユーザーが認証されたことを確認できます。 html#getCurrentUser())は、ユーザが認証されていない場合は 'null'を返し、認証されている場合は' FirebaseUser'インスタンスを返します。 – Grimthorr