刚开始使用Firestore,似乎无法解决我遇到的问题。我正在用手机注册用户,然后提示用户在app中编辑数据,但是我遇到了错误,不知道如何修复。
错误:
I/flutter (7502): [firebase_storage/unauthenticated]用户未认证。验证后再试。
W/Firestore(7502): (23.0.3) [WriteStream]: (b2291d0) Stream closed with status: status {code=NOT_FOUND, description=No document to update:
项目/blahblah/数据库/(默认)/文档/用户/CrxXOi8vajhUYfevbPbMRjAHQqrv5,导致=零}。
E/flutter (7502): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)]
未处理异常:[cloud_firestore/not-found]某些请求的文档未找到。
Authentication工作得很好,因为我在users中看到具有uid的用户。但是,不在Firestore集合"Users"中。我的规则很简单:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{id} {
allow read, delete, update, create: if request.auth != null;
}}}
存储规则设置为:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}}
编辑配置文件的方法是:
String currentUid() {
return firebaseAuth.currentUser.uid;
}
updateProfile(
{File image,
String username,
String email,
String sex,
String dob,
String phone}) async {
DocumentSnapshot doc = await usersRef.doc(currentUid()).get();
var users = UserModel.fromJson(doc.data());
users.username = username;
users.email = email;
users.phone = phone;
users.dob = dob;
users.sex = sex;
if (image != null) {
users.photoUrl = await uploadImage(profilePic, image);
}
await usersRef.doc(currentUid()).update(
{'username': username, 'photoUrl': users.photoUrl, 'phone': phone,
'dob': dob, 'email': email, 'sex': sex});
return true;
}
帮助非常感谢!
我最终了解到,不建议在开发早期强制执行AppCheck存储访问。不强制AppCheck存储,它工作!从现在开始我会看他们的视频!
您的错误来自Storage
,而不是FireStore
。到存储区编辑规则。
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
我找到了一个解决这个问题的方法。pub获取firebase_app_check: ^0.0.3
这个包。然后调用这个app的check类-
await FirebaseAppCheck.instance.activate();
对于我的情况,我这样解决了这个问题。