离线时无法在flutter应用中使用signInWithEmailAndPassword

时间:2018-09-13 03:59:28

标签: firebase-authentication flutter google-cloud-firestore google-authentication

我正在尝试在也使用Cloud Firestore的Flutter应用中使用Firebase Auth。我遇到的问题是离线时该怎么办。

我记录用户名和密码,并尝试使用以下代码登录:

    _user = await _auth.signInWithEmailAndPassword(email: account, password: myPassword).catchError((error) {
  print(error);
});

await _user.getIdToken().catchError((error) {
  // The error source may be that they are not currently connected to the internet
  print(error);
});
final FirebaseUser currentUser = await _auth.currentUser();

问题是当我离线时signInWithEmailAndPassword失败。我需要FirebaseUser对象才能访问Cloud Firestore。我已经阅读了有关身份验证状态持久性的信息,但这似乎不适用于Flutter。

我知道这必须行得通,而且我太新了,无法了解如何在离线设置中将Firebase Auth与Cloud Firestore结合使用。我想念什么?

3 个答案:

答案 0 :(得分:1)

解决方案是测试用户是否已通过身份验证。 Firebase文档说:

  

如果您的应用程序使用Firebase身份验证,则Firebase Realtime Database客户端将在应用程序重新启动时保留用户的身份验证令牌。如果当您的应用程序脱机时auth令牌过期,则客户端会暂停写入操作,直到您的应用程序重新验证用户身份,否则写入操作可能会由于安全规则而失败。

所以我只检查1st。这是代码:

// If user is already logged in, currentUser will return the authenticated user
// Otherwise, _user will be null.
_user = await _auth.currentUser();
if(_user == null) {
  _user = await _auth.signInWithEmailAndPassword(email: account, password: myPassword).catchError((error) {
    print(error);
  });
}

答案 1 :(得分:0)

Firebase身份验证在脱机时可能无法工作。绝对需要能够连接到Firebase后端服务,以便验证用户帐户并更新用于在线访问其他Firebase服务的用户ID令牌。否则,该系统将不会真正安全。

答案 2 :(得分:0)

如何在不连接到身份验证服务器的情况下对用户进行身份验证?
您需要有效的连接来验证用户身份。
您可以将Firebase Cloud Firestore /实时数据库数据存储在电话中(磁盘持久性),但不能存储在身份验证中,因为这是为了防止从本地存储进行滥用访问。

处理此问题的一种方法是仅在用户的设备为connected to the network和/或connected to Firebase时显示登录对话框。