Firebase 权限被拒绝
Posted
技术标签:
【中文标题】Firebase 权限被拒绝【英文标题】:Firebase permission-denied 【发布时间】:2018-06-07 14:56:29 【问题描述】:我是 firebase 的新手。
如何通过以下规则?
service cloud.firestore
match /databases/database/documents
match /document=**
allow read, write: if false;
我已尝试将规则更改为以下,
"rules":
".read": true,
".write": true,
但是有一个错误
mismatched input '' expecting 'function', 'service', 'syntax'
下面是数据库结构。
目前,这是我的代码(不断返回 Permission-denied):
// [START initialize_database_ref]
mDatabase = FirebaseDatabase.getInstance().reference
// [END initialize_database_ref]
val result = HashMap<String, Any> ()
result.put("timestamp", getCurrentTime())
result.put("user_id", USER_ID)
result.put("x_position", -1)
result.put("y_position", -1)
mDatabase!!.ref.child("raw data").child("Z9QD79lDzP7MpD6feWeJ").setValue(result).addOnFailureListener(object : OnFailureListener
override fun onFailure(@NonNull e: Exception)
Log.d("firebase", e.localizedMessage)
)
任何帮助将不胜感激!谢谢:)
【问题讨论】:
【参考方案1】:我能够通过从 Cloud Firestore 切换到实时数据库,然后更改规则来解决问题。 (在我改变这个之后,没有更多的错误显示!)
【讨论】:
【参考方案2】:对于其他在这个问题上苦苦挣扎的人,正确的解决方案是在
中更改false
service cloud.firestore
match /databases/database/documents
match /document=**
allow read, write: if false;
测试时发送至true
。 在项目上线时不要忘记添加额外的安全性!
【讨论】:
我也试过了,但仍然被拒绝。即使我用另一种方式解决了这个问题,我也不知道为什么:(【参考方案3】:如果您使用“实时数据库”或“Cloud Firestore”,您应该检查您的 Angular NgModule 和组件。使用“angularfire2”查看差异:
实时数据库
@NgModule(
...
imports: [
AngularFireDatabaseModule,
...
],
providers: [
AngularFireDatabase,
...
]
)
@Component(...)
export class FirestoreComponent
constructor(private realtimeDb:AngularFireDatabase, ...)
this.locations = realtimeDb.list('locations').valueChanges();
...
云防火墙
@NgModule(
...
imports: [
AngularFirestoreModule,
...
]
)
@Component(...)
export class FirestoreComponent
constructor(private firestore:AngularFirestore, ...)
this.locations = firestore.collection('locations').valueChanges();
...
【讨论】:
【参考方案4】:因为您的方法查询的是 Firebase 而不是 Cloud Firestore 所以你应该使用这个方法:
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("YourCollectionName").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task)
if (task.isSuccessful())
for (QueryDocumentSnapshot document : task.getResult())
Log.d(TAG, document.getId() + " => " + document.getData());
else
Log.w(TAG, "Error getting documents.", task.getException());
);
不要忘记这一点:
implementation 'com.google.firebase:firebase-firestore:17.0.1'
【讨论】:
以上是关于Firebase 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章