如何通过匿名身份验证保存到 Firebase 数据库 - 使用 Flutter

Posted

技术标签:

【中文标题】如何通过匿名身份验证保存到 Firebase 数据库 - 使用 Flutter【英文标题】:How to save, with anonymous authentication, to Firebase database - using Flutter 【发布时间】:2018-11-03 21:08:36 【问题描述】:

在我使用匿名身份验证后,我的权限被拒绝

[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (21033): PlatformException(-3, Permission denied, )
...
_getCurrentUser: FirebaseUser(providerId: firebase, uid: DOIL...............u54j1, displayName: , email: , isAnonymous: true, isEmailVerified: false, providerData: [providerId: firebase, uid: DOIL//////////////54j1, displayName: , email: ])

我对 Firebase 数据库的规则是


  "rules": 
    //Test rule
//     "users": 
//   "$uid": 
//     ".read": "auth != null && auth.uid == $uid",
//     ".write": "auth != null && auth.uid == $uid",
//       
//    

//       General rule - closed to everyone but app uses
         ".read": "auth != null",
         ".write": "auth != null"
  

我用来保存数据的代码 - 与设置为对所有人开放的数据库规则一起工作正常。

      _saveUserData(UserEntry userData) async 

    print("_saveUserData jsonData =" userData.toJson().toString());

    // SAVE MY DATA TO DB
    // tUsers = db reference to the child node users on Firebase
    _tUsers.push().set(talentUserData.toJson());


  

我做错了什么?任何帮助表示赞赏。谢谢。

【问题讨论】:

"auth != null" 表示需要认证。您可以改用"true" 来允许匿名读/写,但要小心,因为这意味着任何拥有任何客户端应用程序的用户都可以修改您的firebase 数据。 @GünterZöchbauer 那么“匿名身份验证”的意义何在? 允许任何人(甚至是匿名的)阅读对于非敏感数据来说都很好。还允许匿名将某个结构的值写入某个路径可能是有意义的。仅允许匿名允许无限制地写入对您的应用程序是有害的,如果您运气不好并且有人滥用您的数据库来处理大量数据,也可能对您的财务造成危害。 【参考方案1】:

希望能免去一些人的头疼。我发现问题在于没有获得 Firebase 数据库的新实例。我在 main.dart 中创建了实例,并将其传递给构造函数中的 HomePage(根据库中的示例文件)。

当我得到一个新实例时...出于绝望调试...它起作用了。我现在可以匿名登录,这样只有安装了该应用程序的人才能写入数据库。

【讨论】:

以上是关于如何通过匿名身份验证保存到 Firebase 数据库 - 使用 Flutter的主要内容,如果未能解决你的问题,请参考以下文章

firebase react-native:通过电话身份验证将匿名用户转换为永久用户

如何在颤振应用程序中使用相同的 Firebase 匿名用户

如何将匿名 Firebase 凭据保存到本地存储以外的其他地方?

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

如何将 Firebase 身份验证链接到实时数据库?

Firebase 只读,没有来自应用程序的身份验证