![](/img/trans.png)
[英]Realtime database authentication: failed: DatabaseError: Permission denied
[英]Firestore Database Registration Failed Permission Denied But Actually Successfully Registers
所以我的数据库有一个相当模糊的问题。 一切正常,只要我注册或有人在我的应用程序上注册,就会显示“注册成功”消息。 弹出。
我每天都在更新我的代码,并致力于改变应用程序和数据库中的内容。 今天在注册一个测试用户时,我收到了这条消息-
它声称注册失败,但该帐户已成功注册。 我已经用另外 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 后,应用程序可以完美运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.