【发布时间】:2018-08-21 01:13:25
【问题描述】:
将 Flutter 与插件 firebase_auth 和 firebase_database 一起使用。 使用电子邮件和密码进行身份验证。 这是用于身份验证和处理身份验证更改事件的代码提取。验证成功后,代码将用户信息插入实时数据库。如果将数据库规则设置为读/写 true,则一切正常。但是,使用标准数据库写入规则 (auth != null),应用程序会抛出 DatabaseError: Permission denied。 似乎数据库插件不知道经过身份验证的身份? 有什么想法有什么问题吗?
FirebaseAuth _auth = FirebaseAuth.instance;
user = await _auth.signInWithEmailAndPassword(
email: _emailC.text,
password: _passC.text
);
然后:
FirebaseAuth _auth = FirebaseAuth.instance;
StreamSubscription<FirebaseUser> _userChangeEvent;
DatabaseReference _usersDbRef = database.reference().child('users');
_userChangeEvent = _auth.onAuthStateChanged.listen((user) {
setState(() {
_isAuthenticated = user != null && user.isEmailVerified;
});
if (_isAuthenticated && _usersDbRef != null) {
_usersDbRef.child(user.uid).once().then((
DataSnapshot data) {
if (data.value == null) {
_usersDbRef.child(user.uid).set({
'id': user.uid,
'email': user.email,
'display_name': user.displayName
});
}
});
}
});
我已经写过规则是标准的,但由于安德烈要求在此处包含它们,因此它们是: 这些是一切正常时的规则:
{
"rules": {
".read": "true || auth != null",
".write": "true || auth != null"
}
}
这些是导致“权限被拒绝”的规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
【问题讨论】:
-
您能否也将您的 Firebase 规则添加到您的问题中?
标签: firebase firebase-realtime-database dart firebase-authentication flutter