Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Flatter成功登录和注销Firebase?_Firebase_Firebase Realtime Database_Firebase Authentication_Firebase Security_Flutter - Fatal编程技术网

如何使用Flatter成功登录和注销Firebase?

如何使用Flatter成功登录和注销Firebase?,firebase,firebase-realtime-database,firebase-authentication,firebase-security,flutter,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,Flutter,我有一个问题已经有一段时间了,我想我已经缩小到没有完全登录和退出Firebase;这导致用户不总是能够访问数据库节点。我有一个主屏幕,通过读取应用程序的setState{},可以读取我的应用程序是否有空的Firebase.instance.currentuser;就像这样 Future <Null> logout() async { await FirebaseAuth.instance.signOut(); setState((){ Firebas

我有一个问题已经有一段时间了,我想我已经缩小到没有完全登录和退出Firebase;这导致用户不总是能够访问数据库节点。我有一个主屏幕,通过读取应用程序的setState{},可以读取我的应用程序是否有空的Firebase.instance.currentuser;就像这样

 Future <Null> logout() async {

    await FirebaseAuth.instance.signOut();

    setState((){
      FirebaseAuth.instance.currentUser;
    });
  }
Future<Null> _google() async {
try {
  await _googleSignIn.disconnect();
  GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  GoogleSignInAuthentication googleAuth = await googleUser.authentication;
  await FirebaseAuth.instance.signInWithGoogle(
      idToken: googleAuth.idToken, accessToken: googleAuth.accessToken);

  Navigator.pushNamed(context, '/menu');
} catch (error) {
  print(error);
}

看起来你的安全规则有漏洞。此时,您允许任何用户编辑和读取表{$user\u id}

如果您想限制登录用户的访问,其id与特定表匹配,我建议如下:

"users": {
  "$uid": {
    ".read": "auth != null && auth.uid == $uid",
    ".write": "auth != null && auth.uid == $uid",
      }
   }

或者类似的,强制用户身份验证=null以及每个用户都可以访问和编辑使用自己的uid auth.uid==$uid

命名的用户的条目这一事实。请检查代码缩进并澄清情况好吗?我想我明白你的意思了,但识别用户帐户有助于或可能有助于更清楚地理解。特别是,我不确定运行FirebaseAuth.instance.currentuser.uid是什么意思,因为它返回的是预期的用户ID,但数据库似乎只读取原始用户。@FabioVeronese我已经检查并编辑了代码缩进。最后一行的意思是FirebaseAuth.instance.currentUser.uid返回的uid,但我的数据库规则的行为仍然像经过身份验证一样。我还添加了安全规则。是什么让你认为你是在充当安全规则的角色?如果它与安全规则有关,我建议您检查我提供的答案
{
  "rules": {
    "$user_id": {
      ".write": true,
      ".read": true
    }
  },
}
"users": {
  "$uid": {
    ".read": "auth != null && auth.uid == $uid",
    ".write": "auth != null && auth.uid == $uid",
      }
   }