如何使用 Flutter 成功登录和退出 Firebase?
Posted
技术标签:
【中文标题】如何使用 Flutter 成功登录和退出 Firebase?【英文标题】:How to successfully log in and out of Firebase using Flutter? 【发布时间】:2018-06-17 02:05:49 【问题描述】:我有一段时间遇到了一个问题,我认为我的范围已缩小到没有完全登录和退出 Firebase;这导致用户并不总是能够访问数据库节点。我有一个主屏幕,可以通过读取应用程序的setState(());
来读取我的应用程序是否有空的Firebase.instance.currentuser
...
Future <Null> logout() async
await FirebaseAuth.instance.signOut();
setState(()
FirebaseAuth.instance.currentUser;
);
如果 currentUser == null 相同的页面,即我的 main.dart 页面,则使用不同的构建设置。在我的登录页面上,我正在像这样登录用户......
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);
Future<Null> _loginButton() async
await FirebaseAuth.instance.signOut();
await _googleSignIn.disconnect();
_email = _emailController.text.toString().replaceAll(" ", "");
_password = _passController.text.toString().replaceAll(" ", "");
//_username = _nameController.text.toString().replaceAll(" ", "");
if (_email != null && _password != null)
try
await FirebaseAuth.instance.signInWithEmailAndPassword(
email: _email, password: _password);
final userid = FirebaseAuth.instance.currentUser.uid;
catch (error)
print(error.toString());
else
所有流程都按预期工作,运行 FirebaseAuth.instance.currentuser.uid
返回预期的用户 ID,但它好像数据库只读取原始用户。
安全规则...
"rules":
"$user_id":
".write": true,
".read": true
,
【问题讨论】:
能否请您检查代码缩进并澄清情况?我想我明白了你的意思,但将用户帐户标识为 或 可能有助于更清楚。特别是我不确定“运行 FirebaseAuth.instance.currentuser.uid 会返回预期的用户 ID,但它好像数据库只读取原始用户”是什么意思。 @FabioVeronese 我已经检查并编辑了我的代码缩进。最后一行的意思是FirebaseAuth.instance.currentUser.uid
返回 的 uid,但我的数据库规则仍然表现得好像 已通过身份验证。我也添加了安全规则。
是什么让你认为你扮演的是 ?如果与安全规则有关,建议您查看我提供的答案
【参考方案1】:
看来您的安全规则存在缺陷。目前,您允许任何用户编辑和读取表 $user_id。
如果您的意思是限制登录用户的访问,其 id 与特定表匹配,我建议如下:
"users":
"$uid":
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid",
或类似的,您强制用户身份验证 (auth!=null
) 以及每个用户都可以访问和编辑以自己的 uid (auth.uid == $uid
) 命名的 users
条目的事实
【讨论】:
以上是关于如何使用 Flutter 成功登录和退出 Firebase?的主要内容,如果未能解决你的问题,请参考以下文章
如何在flutter中使用firebase登录谷歌时检查用户是新用户还是现有用户?
我是 Flutter Web 的新手,如何使用 Firebase 电话身份验证对用户进行身份验证,有没有办法让用户保持登录状态?
如何通过使用flutter bloc从fire存储中使用依赖注入来处理错误`The getter was called on null`