成功身份验证后,Flutter Firebase 数据库权限被拒绝
Posted
技术标签:
【中文标题】成功身份验证后,Flutter Firebase 数据库权限被拒绝【英文标题】:Flutter Firebase database permission denied after successful authentication 【发布时间】: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 规则添加到您的问题中? 【参考方案1】:在我发现问题仅在 ios 上之后,我认为这一定是我的配置有问题,就是这样。 根据此视频正确导入 GoogleService-Info.plist 后:https://youtu.be/3nFIMej3Tvw 工作正常。
【讨论】:
嗨,这对你第一次在 android 上有用吗?在 Android 上,我有一个经过身份验证的用户,可以从不受限制的 Firebase Db 中读取。如果我添加规则以限制仅对经过身份验证的用户的访问(“.read”:“auth != null”),那么我将无法读取我的数据。我是否需要将经过身份验证的用户专门链接到我的实例化 firebase 数据库?谢谢 不,只要你的 android/app/src 中有 google-services.json,你就不必做任何特别的事情。还要检查它是否包含 api_key 条目:"api_key": [ "current_key": "##########" ]。出于某种原因,我不得不手动将其添加到我的 google-services.json 中。以上是关于成功身份验证后,Flutter Firebase 数据库权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Firebase 电话身份验证超时后使 OTP 无效
在 Flutter Web 中长时间使用 Firebase 后退出