热门标签 | 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;

推荐阅读
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 本文介绍了如何在 Vue 3 组合 API 中正确设置 setup() 函数的 TypeScript 类型,以避免隐式 any 类型的问题。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文详细介绍了在 React Native 开发过程中遇到的 'Could not connect to development server' 错误及其解决方法。该问题不仅影响开发效率,而且难以通过网络资源找到确切的解决方案。本文将提供详细的步骤,帮助开发者快速解决这一常见问题。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
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社区 版权所有