Flutter:firebase_auth 好像不行,怎么授权?

Posted

技术标签:

【中文标题】Flutter:firebase_auth 好像不行,怎么授权?【英文标题】:Flutter: firebase_auth seems not to work, how do I authorize? 【发布时间】:2020-01-23 18:43:26 【问题描述】:

我有一个使用 cloud_firestore 包的 Flutter 应用程序,它在 androidios 上运行良好。但是我的数据库是“允许读,写:如果为真”,所以谷歌一直提醒我解决这个不安全问题。这是我做的:

包括 firebase_auth 更改我的 firebase 规则 创建邮件/密码帐户 实现登录过程 将规则更改为“允许写入:如果 request.auth != null;”

我想我一切都好。在应用程序中,似乎是这样的:

print("User $(await FirebaseAuth.instance.currentUser()).email)");

这给了我我帐户的邮件。我也有一个 onAuthStageChanged 监听器,我得到了我所期望的。所以我猜登录确实有效。

但是如果我尝试进行数据库访问,例如使用 .setData(),我得到一个错误

W/Firestore(4411): (19.0.0) [Firestore]: 写入失败于...: Statuscode=PERMISSION_DENIED, description=Missing or enough permissions., cause=null

它看起来好像 auth 包没有正确通知 firestore 包。在日志中,我看到了

D/FirebaseAuth(5698):通知 id 令牌侦听器有关用户 (...)。

我希望出现类似“Firestore:收到令牌...”的内容,但这不会出现。

我必须小心初始化顺序吗?我的是

    _app = 等待 Firebase.App.configure... _firestore = Firestore(app: _app); 等待 FirebaseAuth.instance.signInWithEmailAndPassword...

我在一些搭载 Android 8 和 9 的三星和 OnePlus 设备上进行了尝试。

有什么提示吗?

【问题讨论】:

您能谈谈您是如何修复 Firestore 访问权限的吗?您是否添加了更多规则以仅允许允许的用户?这些规则可能会拒绝您的请求?您可能想粘贴这些规则以更好地理解问题。 你能发布一些代码吗? 这些是我的 Firebase 规则。为了测试,我在“写入”变体之间切换: service cloud.firestore match /databases/database/documents match /deviceinfos/infos allow read: if true; // 允许写入:如果为真;允许写入:如果 request.auth != null; 匹配 /hardware/hardware 允许读取:如果为真;允许写入:如果为真; // 允许写入:如果 request.auth != null; 【参考方案1】:

我让它运行了!使用了来自Flutter & Firebase - using firebase_storage along with firebase_auth的提示

访问数据库时,我使用了指向我创建的 firestore 的指针

static Firestore _firestore;
...
_firestore = Firestore(app: ...);

后来我用了

await _firestore.collection(...)...setData(...);

但登录后 Firestore 似乎发生了变化。当我写的时候它起作用了:

await Firestore.instance.collection...setData

有趣!!

【讨论】:

以上是关于Flutter:firebase_auth 好像不行,怎么授权?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 和 Firebase:任务 ':firebase_auth:compileDebugJavaWithJavac' 执行失败

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

MissingPluginException(在通道 plugins.flutter.io/firebase_auth 上找不到方法 signInWithCredential 的实现)

Flutter 版本解决失败 firebase_auth ^1.4.1 和 http ^0.12.2

Flutter firebase_auth signInWithCredential 在android上不起作用

flutter firebase 版本解决失败