Firebase JS SDK 中会话令牌的显式更新

2023-12-12

我已经使用 Firebase Auth 为多个提供商实现了登录方法,如下所示:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL).then(() => {
  let provider = new firebase.auth.GoogleAuthProvider(); // + facebook, gitHub
  provider.addScope('profile');
  provider.addScope('email');
  firebase.auth().signInWithPopup(provider).then(result => {
    // app logic here

然而,这段代码给了我 60 分钟的持续会话,我想了解如何自动更新当前用户会话,而不必每小时强制登录。

我还使用此代码“监听”当前用户会话状态。

firebase.auth().onAuthStateChanged(user => if (!user) //goto LoginPage

但它本身并不“监听”,只有当我尝试导航或更新页面时它才起作用。所以我不知道如何使用 Firebase 方法限制访问的确切时间(例如最多 15 分钟)。

文档说有一个getIdToken方法,但我不知道在哪里使用这段代码。是应该在到期前每 60 分钟调用一次,还是应该在登录时设置?请提供一些提示或任何涉及这种情况的教程。

EDIT:

另外,经过一段时间的不活动(我认为不到 1 小时)后,我在控制台中收到了此代码:

auth.esm.js:121 POST https://securetoken.googleapis.com/v1/token?key=AIza... 403

Firebase 令牌设置为 60 分钟后过期。然后它会自动为您刷新。无法配置过期时间,并且您无需在前端代码中为此执行任何特殊操作。

唯一的技巧是,您需要授予应用程序 API 密钥使用令牌服务 API 的权限,以便在过期后能够为您创建新的 id 令牌。这是在 GCP 控制台、API 和服务(凭证)中完成的。

所以,代码应该很简单,如下所示

  1. 添加用户认证状态改变监听器

    
    fbAuth.onAuthStateChanged(user => {
      if (user) {
        // User is logged in
        // Proceed with your logged in user logic
      } else {
        // USer is not logged in
        // Redirect to the login page
      }
    })
    
  2. 实现登录逻辑

    
    fbAuth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
     .then(() => {
        return fbAuth.signInWithEmailAndPassword(email, password)
            .then(userCredential => {
                // Login success path
            })
            .catch(error => {
                // Login error path
            });
     })
     .catch(error => {
        // Persistence setting error path
     })
    

您可以在登录前设置身份验证状态持久性,具体取决于您的用例身份验证状态持久性.

  1. 确保您的应用程序 API 密钥有权访问 GCP 控制台中的令牌服务 API这是在GCP 控制台 | API 和服务 |证书然后编辑您的部署环境对应的密钥,以授予 API 密钥对令牌服务 API 的访问权限。

祝你好运 ;)

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

Firebase JS SDK 中会话令牌的显式更新 的相关文章

  • Browserify 与 jQuery >= 2 生成“jQuery 需要一个带有文档的窗口”

    我正在使用 browserify 使用 CommonJS 样式的依赖项来捆绑我的前端 javascript 例如 我有 require jquery dist jquery v2 1 0 beta2 require underscore
  • 无法加载资源:服务器在已部署的 React.js 项目中响应状态为 404(未找到)

    当我将 React 项目部署到 Surge 中时 构建成功并且可以获取应用程序 URL 但是当我链接到 URL 时 我可以在检查控制台中看到一个空白页面和一些错误 Failed to load resource the server res
  • 为什么 Bootstrap 按钮下拉菜单在 iOS 上不起作用?

    看起来甚至连引导演示在这里 http twitter github com bootstrap components html buttonDropdowns不适用于 iOS 您似乎无法在 iPhone 或 iPad 上从中选择项目 有解决
  • iPhone Web 应用程序禁用缓存

    我使用 PHP 构建了一个 iPhone 网络应用程序 主 也是唯一 页面包括苹果移动网络应用程序支持 and 苹果触摸全屏元标记 以便在添加到主屏幕后可以全屏运行 然而 似乎每次我从主屏幕启动应用程序时 都会使用页面的缓存版本而不是刷新页
  • JavaScript:所有标准内置对象实际上都是构造函数吗?

    我最近一直在研究 JavaScript 在花了几个月的时间之后 我仍然对一些内部结构感到困惑 具体来说 我试图理解所谓的标准内置对象 https developer mozilla org en US docs Web JavaScript
  • 按周将对象数组拆分为组

    我有一个包含这样的数据的对象数组 date 01 01 2017 00 00 00 dataField1 dataField2 date 01 02 2017 00 00 00 dataField1 dataField2 date 01 1
  • pointdown 与 onclick:有什么区别?

    两者有什么区别onpointerdown and onclick事件处理程序 有任何实际差异吗 事件在 DOM 树上传播的方式不一样吗 是否有一些设备仅响应这些事件之一 我最初以为这只是pointerdown在触摸设备或笔中触发 但是onc
  • 链接index.html client.js 和 server.js

    我从 Node js 开始 我的第一个程序已经遇到了问题 下面是我正在使用的代码 索引 html
  • 我以为我了解范围

    有人可以告诉我为什么 x 的最后一次记录等于0而不是1 我想因为它是在函数之外声明的 所以它具有全局范围 然后在函数中它的值设置为1并且该值将保持原样一个全球性的 我知道函数内的第一个 x 值是全局的 因为没有 var 关键字声明的任何变量
  • 未处理的 Promise 拒绝:push.on 不是函数

    我正在使用离子2 我得到这个打字稿error当尝试设置推送通知时 我从教程中复制了此示例代码 因此预计它可以工作 我一定有什么问题 任何想法请 Unhandled Promise rejection push on is not a fun
  • td 内的文本可以随 td 一起调整大小吗? (是其高度的百分比?)

    我有一个 100 占屏幕的表格 里面有 3x3 9 个单元格 每个单元格占 33 到目前为止 一切都很好 这是一个干净 可扩展的井字棋游戏 问题在于 TD 内的文本不会随比例缩放 有没有办法说 我希望文本大小为 TD 高度的 30 或者其他
  • Redux 形式:REGISTER_FIELD / UNREGISTER_FIELD 在更改或焦点事件后被调用

    我正在使用 Redux Form 在 React 应用程序中渲染和处理表单事件 使用以下东西 初始值 场数组 不可变 js 材质用户界面 此外 字段数组是使用初始值构建的 export default connect state gt re
  • 将变量从一个 jsp 发送到另一个 jsp

    我有一个 JSP 文件jsp 1 jsp和另一个 JSP 文件jsp 2 jsp 我已经包括了jsp 2 jsp in jsp 1 jsp using 现在我需要某个元素上的单击事件 在该事件中 我想将字符串变量传输到包含的 jsp 中 假
  • 带搜索框的 D3 图表

    我在 D3 中创建了一个图表 其中节点显示特定个人创建文档的时间 该图表还显示了一个搜索框 该搜索框根据搜索框输入是否与与该文档关联的单词匹配而将节点变成红色 这些单词列在数据集的第 5 列中 请参阅下面的数据集 我的问题 一旦将搜索输入到
  • 如何在从数据库异步加载中用占位符替换不存在的图像

    我有一个包含图像的数据库 我需要根据用户的请求即时加载这些图像 这些图像将作为包含 div 容器中的单独 s 的背景图像 类似于图像滚动条 该数据库当前是本地数据库 但这不是我的问题 问题是数据库可能没有我请求的所有图像 并且我可能会得到一
  • 使用 _.extend() 进行 JavaScript 继承

    有什么区别 Employee prototype Object create Person prototype and extend Employee prototype Person prototype 两者都给出相似的结果 输出 但下划
  • 未捕获的类型错误:无法分配给只读属性

    我正在尝试 Nicholas Zakas 所著的 Professional JavaScript for Web Developers 一书中的这个非常简单的示例 但我不知道我在这里做错了什么 我错过了一些非常简单的事情 但我被困住了 这是
  • 什么是标志变量?

    最近我遇到了标志变量 但我不知道它们的作用 我不太确定何时使用标志变量以及如何使用它 我用 Google 搜索了它 但没有任何与我的上下文 JavaScript 相关的具体示例 标记变量的定义和使用 http www javascriptk
  • 事件监听器如何/何时附加到 d3.js 中?

    我正在尝试制作一个 SVG 编辑器 长话短说 我需要将鼠标事件附加到
  • JQuery 循环遍历动态元素并获取数据值

    我正在尝试使用可折叠面板来完成我的要求 sport on click function var thisId this attr id var thisChildren this sportlist thisChildren each fu

随机推荐

  • 如何更改小程序的权限和卡历史字节?

    我已经认为更改历史字节仅限于预个性化步 但是 我发现了一个名为设置ATRHistBytes今天在 GlobalPlatform API 中 这是它的描述 GlobalPlatform 2 2 第 172 页 设置ATRHistBytes p
  • 更改游戏对象枢轴点

    Unity 对象未在中心旋转 直到一个小时才好 我不相信我改变了代码或任何东西 我也尝试过弄乱左上角的枢轴 中心按钮 但没有任何帮助 游戏对象没有在中间旋转 旋转器代码 using UnityEngine public class Rota
  • #ifndef 在 c 文件中?

    是否可以放 ifndef在c文件的顶部 基本上我需要检查运行程序时是否声明了某个预处理器常量 我的程序将相应地改变 我需要检查是否 D DESCENDING ORDER 1作为参数添加 无论给出什么值 我的主 c 文件顶部有以下代码 ifn
  • 无型号类别的改装 2

    我想问一下Retrofit 2 0 一直以来 我只知道使用 GSON Converter 进行 Retrofit 并获取对象 但我不知道如何使用这样的API获取数据https hacker news firebaseio com v0 to
  • 为什么 Ruby 仅有时释放内存?

    根据我生成字符串的方式 Ruby 是否会将内存释放给操作系统 第一个测试代码将占用约235MB size 2 22 string a1234567890abcdefghijklmnopqrstuvwxyz size puts Sleepin
  • 错误:已经有一个与此命令关联的打开的 DataReader,必须先将其关闭

    我正在使用 sql 连接来访问数据库中的不同表 但是 代码返回以下错误 Error 已经有一个与此命令关联的打开的 DataReader 必须先将其关闭 MyContext conn new MyContext protected void
  • 如何列出J中动词的代码

    在控制台中 输入不带参数的单个动词将打印其内容 tolower 3 0 x I 26 gt n 65 i 26 a i t y y x n 97 i 26 a x t 这对于开发来说很好 但在执行过程中无法利用 有没有办法动态地做到这一点
  • 为什么 Haskell 没有比 Eq 更强大的替代方案?

    之所以Set不是给定函子here 似乎可以归结为这样一个事实 a b f a f b是可能的 那么 为什么 Haskell 没有 Eq 的标准替代品 比如 class Eq a gt StrongEq a where a gt a gt B
  • 我可以使用数组或其他可变数量的参数来初始化 C# 属性吗?

    是否可以创建一个可以使用可变数量的参数进行初始化的属性 例如 MyCustomAttribute new int 3 4 5 this doesn t work public MyClass 属性将采用一个数组 不过 如果您控制该属性 您也
  • 启动应用程序并将其发送到第二个显示器

    在 VB 2008 中 我使用类 process 来启动带有一些参数的外部应用程序 有谁知道如何以编程方式将其发送到第二台显示器 另外 有什么方法可以知道有多少显示器被激活 Thanks 您可以在不同的屏幕上找到您的表单 form Loca
  • 尝试从 Android 应用程序将文件上传到 xampp 服务器时出现文件未找到异常

    在我的 Android 应用程序中 我尝试通过搜索手机存储来附加文件 然后尝试将其上传到服务器 我能够搜索文件并附加它们 在将其上传到服务器时我收到文件未找到异常 请帮助我解决这个问题 请让我知道我错过了什么 如果有更好的方法请告诉我 Fi
  • 如何在列顶部显示值 Google Chart API

    我想在柱形图的顶部显示值 就像这张图片中一样 但我想向他们展示如何使用新的 Google Chart API 这是网站和它的源代码
  • 如何使用 DAO.Recordset 通过不可更新查询来更新表

    我有一张相当小的桌子tblFunding有20条记录 我想更新它的字段Payment使用不可更新查询的结果 即 SELECT UserName Sum Payment As Payment FROM tblFundingMain WHERE
  • Java 中多个线程可以持有同一个监视器上的锁吗?

    目前我们正在分析 tomcat 线程转储 同时运行的所有线程的单个线程转储 tomcat 上的时间包含以下几行 soldOutJmsConsumerContainer 1 prio 10 tid 0x00007f8409c14800 nid
  • 如何将变量传递给重写的 toString() 方法?

    是否可以传入一个bool变量变成被覆盖的变量toString 方法 以便它可以有条件地以不同格式打印对象 您可以定义overload的方法ToString public string ToString bool status
  • Java中的整数比较[重复]

    这个问题在这里已经有答案了 Java 中的整数比较很棘手 因为int and Integer表现不同 我明白那部分 但是 正如这个示例程序 shows Integer 400 第 4 行 行为不同于 Integer 5 第 3 行 为什么是
  • 在C/C++中从.csv文件中读取汉字

    我有一个包含中文字符的 csv 文件 我需要读入这些汉字并将它们存储起来以便在程序中进一步使用 我知道必须使用 wchar t 等以 utf 格式处理中文字符 但我无法确切地弄清楚这是如何完成的 有人可以帮我吗 首先 汉字没有唯一的编码方式
  • 拆箱问题

    我有一个扩展 LinkedList 类的类 这是代码的摘录 class SortedList
  • BeautifulSoup 中的 selfClosing标签

    使用 BeautifulSoup 解析我的 XML import BeautifulSoup soup BeautifulSoup BeautifulStoneSoup
  • Firebase JS SDK 中会话令牌的显式更新

    我已经使用 Firebase Auth 为多个提供商实现了登录方法 如下所示 firebase auth setPersistence firebase auth Auth Persistence LOCAL then gt let pro