成功身份验证后,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 身份验证和/或登录不成功

在 Flutter 中使用 Firebase 电话身份验证超时后使 OTP 无效

Firebase 身份验证 Flutter 中的电话号码

在 Flutter Web 中长时间使用 Firebase 后退出

通过 Facebook 进行 Flutter 和 Firebase 身份验证:与设备的连接丢失

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