firebase规则不允许访问
因此,我的颤音代码正常工作,直到我更改Firebase实时数据库规则为止。它不会在调试控制台或其他任何内容中丢弃错误,但是该应用不会获取数据。我附上我的规则和登录方法。
"rules": {
"$uid": {
".read": "auth.uid == $uid || auth.request.uid == $uid",
".write": "auth.uid == $uid || auth.request.uid == $uid"
}
}
和:
void authUser(String email, String password, bool isLogin,
String username) async {
setState(() {
isLoading = true;
});
UserCredential userCreadencial;
FocusScope.of(context).unfocus();
try {
if (isLogin == false) {
userCreadencial = await firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
);
} else {
userCreadencial = await firebaseAuth.signInWithEmailAndPassword(
email: email,
password: password,
);
}
FirebaseFirestore.instance
.collection('users_info')
.orderBy(userCreadencial.user!.uid, descending: true);
await FirebaseFirestore.instance
.collection('users_info')
.doc(userCreadencial.user!.uid)
.set({
'email': userCreadencial.user!.email,
'username': username,
});
setState(() {
isLoading = false;
});
} on PlatformException catch (err) {
print(err);
var message = 'An error occurred, pelase check your credentials!';
if (err.message != null) {
message = err.message!;
}
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(message),
backgroundColor: Theme.of(context).errorColor,
),
);
setState(() {
isLoading = false;
});
} catch (e) {
print(e);
setState(() {
isLoading = false;
});
rethrow;
}
}
So my flutter code works fine until I change my Firebase Realtime Database rules. It does not throw an error in debug console or anything, but the app does not get the data. I attach my rules and the login method.
"rules": {
"$uid": {
".read": "auth.uid == $uid || auth.request.uid == $uid",
".write": "auth.uid == $uid || auth.request.uid == $uid"
}
}
And:
void authUser(String email, String password, bool isLogin,
String username) async {
setState(() {
isLoading = true;
});
UserCredential userCreadencial;
FocusScope.of(context).unfocus();
try {
if (isLogin == false) {
userCreadencial = await firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
);
} else {
userCreadencial = await firebaseAuth.signInWithEmailAndPassword(
email: email,
password: password,
);
}
FirebaseFirestore.instance
.collection('users_info')
.orderBy(userCreadencial.user!.uid, descending: true);
await FirebaseFirestore.instance
.collection('users_info')
.doc(userCreadencial.user!.uid)
.set({
'email': userCreadencial.user!.email,
'username': username,
});
setState(() {
isLoading = false;
});
} on PlatformException catch (err) {
print(err);
var message = 'An error occurred, pelase check your credentials!';
if (err.message != null) {
message = err.message!;
}
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(message),
backgroundColor: Theme.of(context).errorColor,
),
);
setState(() {
isLoading = false;
});
} catch (e) {
print(e);
setState(() {
isLoading = false;
});
rethrow;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的飞镖代码显示您使用 firestore数据库,但您的规则与实时数据库。 Firebase提供的这两个不同的NOSQL数据库服务使用不同的安全规则语法。
使用 firestore syntax
firebase.json.json
firebase Project(在计算机上)中配置的正确规则文件,请参见下文。对于
firebase.json
中的默认项目配置,如下所示,您应该在firestore.rules.rules
文件中定义firestore规则。Your dart code shows that you use the Firestore database but your rules correspond to the Realtime Database. These two different NoSQL Database services offered by Firebase use different security rules syntax.
You should use the Firestore syntax and edit your rules in the correct place:
firebase.json
file of your Firebase project (which is in on your computer), see below.For a default project config in the
firebase.json
as shown below, you should define the Firestore rules in thefirestore.rules
file.