我正在尝试在也使用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结合使用。我想念什么?
答案 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时显示登录对话框。