我正在开展一个项目,我学习了很多教程,以便学习和构建应用程序。但是所有这些,他们将Firebase的读写规则更改为true,这是不安全的。例如,他们改变了
{
"rules": {
".read": false,
".write": false
}
}
到
{
"rules": {
".read": true,
".write": true
}
}
这样可以让任何人以任何方式读取和写入不安全的服务器数据。因此我把它变成了假,现在我无法将用户注册到Firebase,它发出的错误是“权限被拒绝”。那么我现在必须做什么才能获得许可。
以前我使用此代码将用户注册到Firebase,但现在无法使用。
mFirebaseAuth.createUserWithEmailAndPassword(editEmail.getText().toString(), editPass.getText().toString()).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
//Saving User to Database
User user = new User();
user.setEmail(editEmail.getText().toString());
user.setName(editName.getText().toString());
user.setPassword(editPass.getText().toString());
user.setPhone(editPhone.getText().toString());
users.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
waitingdialog.dismiss();
Snackbar.make(rootLayout, "Registration Successful", Snackbar.LENGTH_SHORT).show();
return;
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
waitingdialog.dismiss();
Snackbar.make(rootLayout, "Registration Failed" + e.getMessage(), Snackbar.LENGTH_LONG).show();
return;
}
});
}
});
答案 0 :(得分:9)
出于这个原因,Firebase中有不同的规则,用户注册到数据库取决于这些规则,例如Firebase提供了四条规则
默认
默认规则需要Authentication。它们仅允许对应用程序的经过身份验证的用户进行完全读写访问。如果您希望数据对应用的所有用户开放,但又不希望它向全世界开放,那么它们非常有用
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
公开
在开发期间,您可以使用公共规则代替默认规则来将文件设置为可公开读写。这对于原型设计非常有用,因为您可以在不设置Authentication的情况下开始使用。这种访问级别意味着任何人都可以读取或写入您的数据库。您应该在启动应用程序之前配置更安全的规则。
// These rules give anyone, even people who are not users of your app,
// read and write access to your database
{
"rules": {
".read": true,
".write": true
}
}
作为用户
以下是一个规则示例,该规则为每个经过身份验证的用户提供/ users / $ user_id中的个人节点,其中$ user_id是通过Authentication获取的用户的ID。这是任何将数据专用于用户的应用程序的常见方案。
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
为私人 私有规则禁止用户对您的数据库进行读写访问。使用这些规则,您只能通过Firebase控制台访问数据库。
// These rules don't allow anyone read or write access to your database
{
"rules": {
".read": false,
".write": false
}
}
要将用户注册到数据库,而读取和写入权限为false,则只允许您编辑和读取Firebase控制台中的数据。