【发布时间】:2021-12-28 16:59:01
【问题描述】:
我使用 Firebase,确切地说是一个实时数据库,我不知道应该设置什么规则。我制定了这些规则:
{
"rules": {
".read": "data.child('Users').child(auth.uid).exists()",
".write": true
}
}
但是现在每个人都可以写作了。 当我设置这些时:
{
"rules": {
".read": "data.child('Users').child(auth.uid).exists()",
".write": "auth != null"
}
}
使用 Gmail 的用户无法登录,因为数据库中的记录不是在所有设备上创建的,而是在所有设备上创建的。当我在 OnePlus 上测试时,一切都很好,当我在三星上测试时,数据库中的记录没有创建。 这是我负责创建用户的代码:
fAuth.createUserWithEmailAndPassword(reg_email, reg_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
fAuth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
userID = fAuth.getCurrentUser().getUid();
reg_user = new User(reg_email, sex, btn_text, 0, 0);
databaseReference.child(userID).setValue(reg_user);
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(intent);
finish();
FirebaseAuth.getInstance().signOut();
} else {
Toast.makeText(RegisterActivity.this, "Error " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.INVISIBLE);
}
}
});
} else {
Toast.makeText(RegisterActivity.this, "Error " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.INVISIBLE);
}
}
});
【问题讨论】:
标签: java android firebase firebase-realtime-database firebase-security