是啥导致“权限被拒绝”-带有 FIREBASE 和 FLUTTER 的消息
Posted
技术标签:
【中文标题】是啥导致“权限被拒绝”-带有 FIREBASE 和 FLUTTER 的消息【英文标题】:what causes "permission denied"-message with FIREBASE and FLUTTER是什么导致“权限被拒绝”-带有 FIREBASE 和 FLUTTER 的消息 【发布时间】:2019-02-11 16:26:46 【问题描述】:我有错误
'W/SyncTree(31625): Listen at /address failed: DatabaseError: Permission denied'
同时使用匿名 firebase 用户向 firebase 发送请求,并且没有花哨的 firebase 数据库规则 :) 。 ..我想找出导致此消息的原因。
编辑:错误与现有用户相同,表示用户登录似乎可以工作,但无法访问数据库。
到目前为止我做了什么:
设置 firebase(包括在 pubspec.yaml 中添加 google_service.json 和依赖项) - 目前有效如下创建登录(例如来自 google link):
Future<String> _testSignInAnonymously() async
final FirebaseUser user = await _auth.signInAnonymously();
assert(user != null);
assert(user.isAnonymous);
assert(!user.isEmailVerified);
assert(await user.getIdToken() != null);
assert(user.providerData.length == 1);
assert(user.providerData[0].providerId == 'firebase');
assert(user.providerData[0].uid != null);
assert(user.providerData[0].displayName != null);
assert(user.providerData[0].photoUrl == null);
assert(user.providerData[0].email != null);
final FirebaseUser currentUser = await _auth.currentUser();
print(currentUser.uid);
print(currentUser.isAnonymous);
assert(user.uid == currentUser.uid);
return 'signInAnonymously succeeded: $user';
print 语句提供了一个 userId(这个 id 也在 firebase auth 部分)--> 在我看来,我有一个登录用户
像谷歌示例 (link) 中那样实现初始化:
Future<void> main() async
final FirebaseApp app = await FirebaseApp.configure(
name: 'mydbName',
options: const FirebaseOptions(
googleAppID: 'myAppId',
apiKey: 'myApiKey',
databaseURL: 'myUrl',
),
);
runApp(new MyApp(app));
在另一个处于状态的有状态小部件上,我尝试请求一些 firebase 数据:
void initState()
final FirebaseDatabase database = new FirebaseDatabase(app: widget.app);
database.reference().child('address').once().then((DataSnapshot snapshot)
print('Connected to database and read $snapshot.value');
);
super.initState();
我已经删除了 firebase 中的所有规则,除了:
".read": "auth != null",
".write": "auth != null",
我在 firebase android app
中使用 SHA-1 证书/指纹
firebase ios app
的相同 firebase 数据库没有任何问题
我需要什么:
我需要一些提示如何找出初始化代码或用户登录或其他问题是否有问题
【问题讨论】:
您还下载了 google-services.json 到android/app/google-services.json
?
@GünterZöchbauer 是的,我愿意
您是将规则推送到此数据库name: 'mydbName',
还是仅推送到默认数据库?
@GünterZöchbauer 我将规则推送到我的数据库https://mydbName.firebaseio.com/
。我希望这些规则同时用于这个数据库相关的应用程序(ios 和 android)?!我的 ios 应用程序可以使用它
您是否在控制台中检查了指定数据库中的规则?规则是每个数据库的。你检查过firebase控制台中的模拟器吗?相同的规则适用于 iOS 和 Android,但不适用于 mydbName
和默认数据库。
【参考方案1】:
似乎FirebaseApp.configure(
中的数据库没有正确寻址
FirebaseDatabase.instance.reference().child(...)
将使用google-services.json
中配置的项目默认数据库
【讨论】:
这个“解决方法”解决了我的问题,谢谢 :) 如果我在配置中发现问题,我会发布它以上是关于是啥导致“权限被拒绝”-带有 FIREBASE 和 FLUTTER 的消息的主要内容,如果未能解决你的问题,请参考以下文章