gpt4 book ai didi

Firebase + React Native : Offline authentication

转载 作者:行者123 更新时间:2023-12-03 16:45:14 25 4
gpt4 key购买 nike

我在 React Native iOS 应用程序中使用 Firebase,主要用于存储用户数据和用户身份验证,效果很好 当设备实际具有工作网络连接时 .

当谈到 Firebase 的离线功能时,它看起来像这样:

问题:在没有网络连接的情况下启动应用程序的用户无法执行任何操作,因为他们从未登录过

以下是重现此行为的步骤:

第 1 步:注销的用户启动具有网络连接的应用程序

  • 用户点击“Facebook 登录”按钮
  • Firebase 使用 Facebook 身份验证
  • 登录
  • onAuthStateChanged (user) 正在使用登录用户作为参数调用
  • user.getToken()获得的token发送到我的服务器,它会生成一个自定义 token ( generatedToken ),可用于使用 signInWithCustomToken (generatedToken) 登录 Firebase 身份验证因此保存在本地存储中
  • 用户愉快地读取和写入 Firebase 数据库,更改立即与 Firebase 服务器同步

  • 第 2 步:登录用户启动具有网络连接的应用程序
  • 应用程序意识到有一个 generatedToken在本地存储中
  • generatedToken用于 firebase.auth().signInWithCustomToken (..)
  • (与步骤 1.3 相同)
  • (与步骤 1.4 相同)
  • (与步骤 1.5 相同)
  • 网络连接丢失 :用户仍处于登录状态( onAuthStateChanged (user) 没有被调用 null 作为 user ,就像 manually signing out 之后的情况一样),因此仍然可以读取和写入 Firebase 数据库
  • 网络连接恢复 :更改与 Firebase 服务器同步

  • 第 3 步:登录用户在没有网络连接的情况下启动应用程序
  • 应用程序意识到有一个 generatedToken在本地存储中
  • generatedToken用于 firebase.auth().signInWithCustomToken (..)
  • firebase.auth().signInWithCustomToken (..)失败,因为没有网络连接
  • onAuthStateChanged (user)正在调用 null作为 user
  • 用户根本无法使用 Firebase 数据库,因为所有读/写请求都因缺少身份验证而失败

  • 尝试的解决方案
  • 设置persistenceEnabledtrue在 Objective-C/AppDelegate.m 中,在初始化 FIRApp 之后:
    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    // ...
    [FIRApp configure];
    [FIRDatabase database].persistenceEnabled = YES;
    // ...
    }

    这不会导致预期的结果,并且(至少在我的情况下)在 Firebase 的行为方面没有任何改变。
  • --- 您的建议 ---

  • 感谢您的投入!

    最佳答案

    虽然 Firebase JS SDK 很棒并且通常在 React Native 中工作,但它主要是为 Web 平台构建的,因此不是在 React Native 环境中使用的最全面的解决方案,例如。有很多 Firebase 服务将无法与 Web SDK 一起使用。见对照表here .

    但是,您可以使用原生 Android/iOS Firebase SDK 运行,并在它们和您的 JavaScript 代码(即 react 原生模块)之间架起一座桥梁。

    值得庆幸的是,您不必自己实现此功能,因为已经有模块可以为您执行此操作:

    react-native-firebase例如,在 JavaScript 端镜像 Web SDK API,但使用原生 Android 和 iOS Firebase SDK 在原生端执行。它与您可能已经实现的任何现有 Firebase Web SDK 逻辑兼容,旨在作为 Web SDK 的直接替代品。

    该库通过身份验证持久性和离线功能支持您的用例:

    import firebase from 'react-native-firebase';

    const instance = firebase.initializeApp({
    persistence: true
    });

    // can also use `keepSynced` / `setPersistence` methods:
    // instance.database().ref('/someref').keepSynced();
    // instance.database().setPersistence(true);

    export default instance;


    (免责声明:我是 react-native-firebase 的作者)

    关于Firebase + React Native : Offline authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41894816/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com