Firebase + React Native:离线身份验证

2024-02-20

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

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

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

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

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

  1. 用户点击“Facebook 登录”按钮
  2. Firebase 使用 Facebook 身份验证登录
  3. onAuthStateChanged (user) https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onAuthStateChanged正在以登录用户作为参数进行调用
  4. 获得的令牌user.getToken()发送到我的服务器,该服务器生成一个自定义令牌(generatedToken)可用于使用以下方式登录 Firebase 身份验证signInWithCustomToken (generatedToken) https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithCustomToken因此保存在本地存储中
  5. 用户愉快地读取和写入 Firebase 数据库,更改会立即与 Firebase 服务器同步

第 2 步:登录用户启动应用程序with网络连接

  1. 应用程序意识到有一个generatedToken在本地存储中
  2. generatedToken是用来firebase.auth().signInWithCustomToken (..)
  3. (同步骤1.3)
  4. (同步骤1.4)
  5. (与步骤1.5相同)
  6. 网络连接丢失: 用户仍处于登录状态 (onAuthStateChanged (user)没有被调用null as a user,就像之后的情况一样手动退出 https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signOut),因此仍然可以读取和写入 Firebase 数据库
  7. 网络连接已恢复:更改与 Firebase 服务器同步

第 3 步:登录用户启动应用程序without网络连接

  1. 应用程序意识到有一个generatedToken在本地存储中
  2. generatedToken是用来firebase.auth().signInWithCustomToken (..)
  3. firebase.auth().signInWithCustomToken (..)失败,因为没有网络连接
  4. onAuthStateChanged (user)正在被调用null as a user
  5. 用户根本无法使用 Firebase 数据库,因为所有读/写请求由于缺少身份验证而失败

尝试的解决方案

  1. Setting persistenceEnabled to true在 Objective-C / AppDelegate.m 中,初始化之后FIRApp:

    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      // ...
      [FIRApp configure];
      [FIRDatabase database].persistenceEnabled = YES;
      // ...
    }
    

    这不会导致预期的结果,并且(至少在我的情况下)不会改变 Firebase 的行为。

  2. --- 您的建议在这里 ---

感谢您的投入!


虽然 Firebase JS SDK 很棒并且通常可以在 React Native 中工作,但它主要是为 Web 平台构建的,因此并不是在 React Native 环境中使用的最全面的解决方案。有相当多的 Firebase 服务无法与 Web SDK 一起使用。见对比表here https://github.com/invertase/react-native-firebase#supported-firebase-features.

但是,您可以使用原生 Android/iOS Firebase SDK 运行,并在它们和 JavaScript 代码(即 React Native 模块)之间建立桥梁。

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

反应本机 Firebase https://github.com/invertase/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的作者)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase + React Native:离线身份验证 的相关文章

  • IE8 和怪异模式

    IE8 是否像 IE6 7 一样以怪异模式运行 我有一个网页 其中有一些非常奇怪的代码 内容以填充和负边距居中 它在 IE6 7 和其他浏览器中可以正常工作 但在 IE8 中 内容区域的宽度只有一半并且不居中 怪异模式的标志 源代码在 DO
  • 在 Ruby 中生成 GUID

    我有一个问题 用 GUID 很容易解决 特别是 对于密码重置工作流程 我想将 GUID 令牌发送到用户的电子邮件并让他们使用该令牌重置密码 由于 GUID 是唯一的 因此这非常安全 并且可以避免我通过电子邮件向人们发送密码 这是有风险的 我
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 用于将用户发送至设备应用商店上的应用评论页面的 URL

    为了将 iTunes App Store 置于最前面并打开它以显示应用程序的评论页面 要启动的 URL 是什么 我想将我的用户发送到 撰写评论 页面 其他一些 SO 答案提供了如下 URL 但它似乎不起作用 itms apps itunes
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • Angular2排序数组用于在html中的*ngFor中显示

    我正在循环浏览所有帖子 li 当显示每个帖子的日期时 我会执行以下操作 post date date yyyy MM dd HH mm ss 我想要做的是按最新的第一个顺序显示所有帖子 我尝试过使用类似的管道 li li import Pi
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 捕获 SQLAlchemy 异常

    我可以使用什么捕获 SQLAlechmy 异常的上层异常 gt gt gt from sqlalchemy import exc gt gt gt dir exc ArgumentError CircularDependencyError
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • Pandas:如何删除以 nan 作为列名的多个列?

    根据标题 这是一个可重现的示例 raw data x this that this that this np nan np nan np nan np nan np nan np nan y np nan np nan np nan np
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la
  • 如何循环遍历颜色数组以更改按键背景(按下/向下)

    互联网 如果这与其他人没有什么关系 请原谅我 但我会将其留在这里 以防这是一个有效的问题 我正在尝试创建一个文本区域字段 其中用户每次按下键 a z 都会触发背景颜色更改 在数组中列出 我一直在用 JQuery 做这件事 我想我已经很接近了
  • SQL Express 上的 OLAP

    我想知道是否有任何桌面 OLAP 解决方案可以使用 SQL Express 因此不需要 Analysis Services 我的任务是找到一种方法让我们的客户能够制作 临时 报告 但其中绝大多数都是在 Sql Express 上 在以前的工
  • 如何使用 WinJS 以编程方式关闭 Win8 应用程序中的 MessageDialog?

    Here is 类似的问题 https stackoverflow com questions 12698666 how to close message dialog programmatically关于如何以编程方式关闭 Win8 应用
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • 为什么编译器在没有闭包的情况下为委托添加额外的参数?

    我正在玩delegates并注意到当我创建一个Func
  • 如何解析Python库中的数据包? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何使用 python 从 pcap 文件或接口解析数据包 我正在专门寻找一个使用记录良好的库的解决方案
  • 如何以编程方式更改默认声音播放设备?

    如何以编程方式更改 vista 中播放和录制的默认音频设备 是否有像Windows XP中的声音管理器那样的注册表设置 哪个 API 可以实现 系统托盘音频设备切换器使用 Software Microsoft Multimedia Soun
  • 零寄存器如何提高性能?

    在 MIPS ISA 中 有一个零寄存器 r0 始终给出零值 这允许处理器 任何产生要被丢弃的结果的指令都可以将其目标定向到该寄存器 成为一个来源0 据说在这source https web archive org web 20170328
  • 使用 pyspark 结构化流计算移动平均列

    我正在使用 pyspark 处理一些传入的流数据 我想向我的数据帧添加一个具有 50 秒移动平均值的新列 我尝试使用带有 rangeBetween 的 Window 规范 import pyspark sql window as W w W
  • 导入 mysql.connector ModuleNotFoundError:没有名为“mysql.connector”的模块; “mysql”不是一个包

    导入 mysql connector ModuleNotFoundError 没有名为 mysql connector 的模块 mysql 不是一个包 pip 安装 mysql connector python rf python版本 3
  • 无法显示希腊字符 .mdb 文件(PHP 和 ODBC)

    我在显示 MS Access 2007 表中希腊语列中的文本时遇到问题 我正在使用 PHP 和 dbc odbc pconnect Driver Microsoft Access Driver mdb Dbq mdbFilename use
  • 使用 PHP 分块传输 FTP 上传?

    是否可以使用 PHP 进行 FTP 上传 我有文件需要上传到另一台服务器 但我只能通过 FTP 访问该服务器 不幸的是 我无法增加该服务器上的超时时间 有可能做到这一点吗 基本上 如果有一种方法可以写入文件的一部分 然后附加下一部分 并重复
  • 如何使用图像代替box-shadow来达到类似的效果?

    我想要实现如下图所示的框阴影效果 图片在这里 https i stack imgur com BpqGM png 但是我不想使用css3box shadow财产 这是因为我正在构建一个phonegap android应用程序 并且在使用时存
  • 使用react-loadable延迟加载组件的动态路径导入

    我正在使用 create react app 创建一个应用程序 并使用 React loadable 延迟加载组件 我想要做的是导入加载器对象或react loadble模块的Loadable函数的动态路径 Code const Loada
  • npm install 缺少模块

    在我能跑之前gulp在我的项目中我需要运行npm install 除了在我的计算机上之外 这都有效 因为我收到以下错误 Error Cannot find module socket io at Function Module resolv
  • 加密会话变量有安全方面的好处吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 所有字母的正则表达式

    我需要所有字母表的正则表达式 我有一个输入和目标文本 它们都可以属于不同的字母表 我的意思是它们可以属于中文 拉丁文 西里尔文和任何其他字母 我需要一个用于多语言输入和多语言目标文本的正则表达式 有人对此有任何想法吗 我该如何编写这个正则表
  • 容器中的共享库

    对于两个进程A和B 都使用库libc so libc so只加载到内存一次 当 A 和 B 都运行在同一主机和同一 rootfs 上时 这是正常情况 对于容器来说 如果A和B运行在不同的容器中 A和B是否共享相同的内存区域 例如 image
  • 在scala Spark2中运行saveAsNewAPIHadoopDataset到hbase时出现空指针异常

    我正在使用 saveAsNewAPIHadoopDataset 将 RDD 保存到 Hbase 中 以下是我的工作创建和提交 val outputTableName test3 val conf2 HBaseConfiguration cr
  • Excel VBA - 连接两个数组

    我需要将两个数组 vd 和 vd1 连接到 vdu 中 ReDim vdu 1 To UBound vd 1 UBound vd1 1 1 To 1 For i 1 To UBound vd 1 vdu i 1 vd i 1 Next i
  • VB 中的 With 语句中有多个对象吗?

    我在 VB 中使用了很多标签With语句来设置它们的属性 Problem有什么办法我可以做类似以下的事情 With lblA lblB lblC fontColor color Red End With 这可能吗 还是我必须手动执行With
  • 删除 BeautifulSoup 分解后变空的行

    我试图从文件中删除某些 HTML 标签及其内容BeautifulSoup 如何删除应用后变为空的行decompose 在这个例子中 我想要之间的线a and 3消失 因为这是 span span 块了 但到底不行 from bs4 impo
  • Django ..“加入”查询?

    伙计们 Django 中的 join 查询如何或在哪里 我认为 Django 没有 加入 但是我将如何加入 Thanks 如果您使用模型 则 select lated 方法将返回您在该模型中设置的任何外键 最多达到您指定的限制 的对象
  • Firebase + React Native:离线身份验证

    我在 React Native iOS 应用程序中使用 Firebase 主要用于存储用户数据和用户身份验证 效果很好当设备确实有可用的网络连接时 当谈到Firebase的离线功能时 它看起来像这样 问题 在没有网络连接的情况下启动应用程序