정말이 문제가 붙어 있습니다. 나는 realtimedatabase firebase에서 일부 사용자를 삭제하려고합니다. Firebase에서 제공하는 이메일/비밀번호 인증을 사용하고 있습니다. 내가 사용자를 다시 인증하면 DB에서 데이터를 삭제하려고합니다. firebase에서 오류가 거부되었습니다 (com.google.firebase.database.DatabaseException : Firebase 데이터베이스 오류 : 사용 권한이 거부되었습니다). 왜? 디버그 모드에서사용자가 인증되었지만 데이터베이스에서 데이터를 삭제할 수 없습니까?
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
이 모두는 잘 작동하고 :
public class DBHelper {
private static DBHelper instance = null;
private FirebaseDatabase database;
private DatabaseReference ref;
private DBHelper() {
database = FirebaseDatabase.getInstance();
}
public static DBHelper getInstance() {
if (instance == null)
instance = new DBHelper();
return instance;
}
public void saveUserOnDB(String userId, String name, String email) {
ref = database.getReference().child("users");
ref.child(userId).setValue(new User(name, email));
}
public void deleteUser(String userId) {
ref = database.getReference().child("users");
ref.child(userId).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(!task.isSuccessful()){
Log.e("TAG","onComplete",task.getException());
}
}
});
}}
중포 기지 규칙 :
public void reAuthenticateUser(String password) {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider
.getCredential(user.getEmail(), password);
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (!task.isSuccessful()) {
handleExceptions(task.getException());
} else {
dialog.dismiss();
DBHelper.getInstance().deleteUser(user.getUid());//the problem is here
deleteUserAccount();
}
}
});
}
가 여기 내 DBHelper 클래스입니다 :
여기 내 코드입니다 데이터베이스 규칙을 공용으로 전환하면 데이터가 db에서 삭제됩니다.
감사합니다. 지금 작동합니다 : D – Gabriela