热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase+ReactNative:离线身份验证

如何解决《Firebase+ReactNative:离线身份验证》经验,为你挑选了1个好方法。

我在React Native iOS应用程序中使用Firebase,主要用于存储用户数据和用户身份验证,当设备实际具有有效的网络连接时,该功能非常有用.

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

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

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

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

    用户点击"Facebook登录"按钮

    Firebase使用Facebook身份验证登录

    onAuthStateChanged (user) 正在使用登录用户作为参数调用

    获得的令牌user.getToken()被发送到我的服务器,该服务器生成一个自定义令牌(generatedToken),可用于登录Firebase身份验证使用signInWithCustomToken (generatedToken),因此保存在本地存储中

    用户愉快地读取和写入Firebase数据库,更改立即与Firebase服务器同步

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

    应用程序意识到generatedToken在本地存储中有一个

    generatedToken 是用来 firebase.auth().signInWithCustomToken (..)

    (与步骤1.3相同)

    (与步骤1.4相同)

    (与步骤1.5相同)

    网络连接丢失:用户仍然登录(onAuthStateChanged (user)未与所谓nulluser,喜欢它的后的情况下手动注销),因此仍然可以读写到火力地堡数据库

    网络连接已恢复:更改与Firebase服务器同步

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

    应用程序意识到generatedToken在本地存储中有一个

    generatedToken 是用来 firebase.auth().signInWithCustomToken (..)

    firebase.auth().signInWithCustomToken (..) 失败,因为没有网络连接

    onAuthStateChanged (user)被称为与null作为user

    用户根本无法使用Firebase数据库,因为所有读/写请求都因缺少身份验证而失败

尝试的解决方案

    在初始化之后persistenceEnabled立即true在Objective-C/AppDelegate.m中设置FIRApp:

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

    这不会导致期望的结果,并且(至少在我的情况下)在Firebase的行为方面不会改变任何内容.

    ---你的建议---

感谢您的投入!



1> Salakar..:

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

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

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

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

该库支持具有auth持久性和脱机功能的用例:

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;

推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
author-avatar
莫乂乂_465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有