所以我的数据库有一个相当模糊的问题。一切工作正常,每当我注册或有人在我的应用程序上注册时,都会显示“注册成功!”的消息。弹出窗口。
我每天都在更新我的代码,并致力于更改应用程序和数据库中的内容。今天在注册测试用户时,我收到了这条消息 -
它声称注册失败,但帐户已成功注册。我已经用另外 3 个帐户对此进行了测试。相同的消息 - 然而,注册实际上已成功,并且用户可以使用其详细信息登录。
我还没有编码这个异常。我已经编码了异常,例如密码太短、注册失败、没有互联网等,但我从未创建过权限检查。我认为 Permission Denied 来自 +e.getMessage()?我可以更改 firestorm 数据库规则中的某些内容吗?
这是我的代码:
private void showREGISTERnew() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("REGISTER");
dialog.setMessage("Please use email to register.");
LayoutInflater inflater = LayoutInflater.from(this);
View layout_login = inflater.inflate(R.layout.layout_login, null);
final MaterialEditText editEmail = layout_login.findViewById(R.id.editEmail);
final MaterialEditText editPassword = layout_login.findViewById(R.id.editPassword);
dialog.setView(layout_login);
//set btton
dialog.setPositiveButton("REGISTER", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//check validation
if(TextUtils.isEmpty(editEmail.getText().toString())){
Snackbar.make(rootLayout, "Please enter email address", Snackbar.LENGTH_SHORT)
.show();
return;
}
if(TextUtils.isEmpty(editPassword.getText().toString())){
Snackbar.make(rootLayout, "Please enter your password", Snackbar.LENGTH_SHORT)
.show();
return;
}
if(editPassword.getText().toString().length() < 6){
Snackbar.make(rootLayout, "Password too short.", Snackbar.LENGTH_SHORT)
.show();
return;
}
//reg new user
auth.createUserWithEmailAndPassword(editEmail.getText().toString(), editPassword.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
//save user to db
User user = new User();
user.setEmail(editEmail.getText().toString());
//user setphone
//user setname
user.setPassword(editPassword.getText().toString());
//use email to key
users.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Snackbar.make(rootLayout, "You have registered successfully.", Snackbar.LENGTH_SHORT)
.show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Snackbar.make(rootLayout, "Registration failed."+e.getMessage(), Snackbar.LENGTH_SHORT)
.show();
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Snackbar.make(rootLayout, "Registration failed."+e.getMessage(), Snackbar.LENGTH_SHORT)
.show();
}
});
}
});
最佳答案
我实际上实现了两个数据库。一个将保存用户群广告,一个将保存价格和位置数据。
但是我忘记了,经过一定时间后,读写权限会自动设置为false。
几周前收到通知时,我将主数据库的读写权限改回 true,但忘记了第二个权限。
我检查了第二个,权限设置为 false,因此注册失败,即使我可以注册,权限也被拒绝。
将它们更改回 true 后,应用程序可以完美运行。
关于java - Firestore数据库注册失败权限被拒绝但实际上注册成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61142397/