如何使用Flatter成功登录和注销Firebase?
我有一个问题已经有一段时间了,我想我已经缩小到没有完全登录和退出Firebase;这导致用户不总是能够访问数据库节点。我有一个主屏幕,通过读取应用程序的setState{},可以读取我的应用程序是否有空的Firebase.instance.currentuser;就像这样如何使用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
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",
}
}