android - 当用户离线时,Firebase Auth session 会持续多长时间?

标签 android ios flutter firebase-authentication

我的应用程序在 Flutter 上,并且我正在使用离线持久性,因为我的用户最多可以停留 4 小时,然后才能再次建立互联网连接。我读过,刷新 token 是长期存在的,理论上“永不过期”,但是在我的测试中,我注意到 IOS 和 Android session 之间存在很大差异:

我正在做的测试如下:

  1. 我通过互联网连接打开应用,然后继续进行身份验证过程(Firebase 身份验证)。
  2. 我使用应用程序,然后激活离线模式
  3. 我最小化应用程序
  4. 我激活了飞行模式,因此设备没有互联网连接(离线模式)
  5. 稍后我会检查该应用是否仍在 session 中,以便我可以继续在离线模式下输入数据。

到目前为止我得到的结果是:

在 IOS 上:

session 在离线模式下保持 Activity 状态。我测试了75分钟,120分钟,最后一次测试了4小时。我无法保证 session 永远不会过期,但它似乎确实是持久的。

在 Android 上:

如果我在 25 分钟前进入, session 将保持 Activity 状态。

只要我每 25 分钟至少操作一次应用程序,我就可以在离线时保持 session Activity (我尝试了 5 个 25 分钟的循环)

如果它已最小化且离线超过 30 分钟,它会再次要求我提供凭据(这是不可能获得的,因为我处于离线状态)

我的问题是:

<强>1。操作系统为 IOS 和 Android 时,Firebase 身份验证后的离线 session 时长有何不同?

<强>2。是否有真正的衡量设备离线时 Firebase 身份验证 session 持续多长时间的方法?

<强>3。有没有办法修改这个参数以获得更长的 session ?我想要至少 12 小时,否则永远不会过期。


附件:

测试设备:

IOS:Iphone X.IOS 版本 14.2

Android:三星 J2 Android 版本 8.1.0

flutter 代码:

我使用提供商验证用户身份的方式如下:

class UsuarioProvider {
  final FirebaseAuth _firebaseAuth;
  DatabaseReference db = FirebaseDatabase.instance.reference();

  UsuarioProvider({FirebaseAuth firebaseAuth})
    : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance;

 Future <Map<String, dynamic>> signIn(String email, String password) async {
   
   try {
      UserCredential result = await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
      User user = result.user;
      return {'ok' : true, 'localId': user.uid, 'email' : user.email};
   } catch (e) {
        print(e);
      return {'ok': false, 'code': '${e.code}', 'mensaje': '${e.message}' }; 
   }
 }

我用来调用 firebase 的方式是:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseDatabase database;
  database = FirebaseDatabase.instance;
  database.setPersistenceEnabled(true);
  database.setPersistenceCacheSizeBytes(10000000);
  runApp(MyApp());
} 

最佳答案

How long does a Firebase Auth session last when the user is offline?

Firebase 身份验证基于两个 token :永不过期的刷新 token ,以及在生成一小时后过期并由 SDK 自动刷新的 ID token 。

正如我对 your previous question 的回答所述,无法扩展 ID token ,因此如果用户离线,它就会过期。因此,您应该从“什么时候过期?”重新思考这个问题。到“ID token 过期后 SDK 会做什么?”


例如,当用户离线时,数据库 SDK 将继续处理读取并将写入排队。当 ID token 过期时,甚至会继续这样做,因为 SDK 无法确定是否需要身份验证:数据库安全规则通常会这样做。

当与服务器的连接恢复时,数据库客户端会等待 ID token 刷新,然后再将挂起的写入发送到服务器,以确保这些写入以最新的身份验证状态进行处理。


您的问题不是您的身份验证 session /ID token 过期,而是 Android 上的应用程序或 SDK 的某些部分要求用户重新输入其凭据。解决此问题应首先弄清楚该提示来自何处。

关于android - 当用户离线时,Firebase Auth session 会持续多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65397458/

相关文章:

Android - 如何避免两个 runOnUIThread 调用之间的死锁

objective-c - 检测应用程序中的所有触摸

Flutter - 检查当前时间是否在给定的每小时范围内

flutter - Dart 范围之间的随机双代生成

android - 有人在 Cocos2d-android 中以更高分辨率运行他们的游戏吗?

android - 是否可以同时在 iOS 和 Android 模拟器上启用热重载?

ios - 切换到另一个 View 时隐藏 UISearchController

ios - 如何在 Swift 3 中解包一个模态类对象

flutter - 如何重用模型作为父模型

android - 以编程方式实现相对布局方向