问题标签 [firebase-admin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
229 浏览

android - 为什么在我重新登录之前,Android Firebase 会停止同步?

在我重新登录之前,Android Firebase 似乎停止同步。

  • 我使用 Firebase Admin SDK 将数据推送到 Firebase。
  • 我向手机发送一条 FCM 消息以将其唤醒。该消息包含新数据的推送 ID。Android 应用程序会读取 Firebase,直到它看到新的推送 ID,然后处理数据。

通常这是有效的。有时电话会处于看不到新推送 ID 的状态。注销/登录会使其重新开始工作。

这不是竞争条件,因为我在 FCM 消息中将推送 ID 发送到手机。这让 Android 应用程序可以读取,直到它看到推送 ID(或者在我的情况下有时会超时)。我已验证数据已推送到 Firebase,并且 Android 应用正在尝试读取正确的 ID。

一旦手机处于这种状态,它就会继续失败,直到我重新登录。没有错误或异常(uid 不为空,我可以附加监听器)。它只是永远不会看到新的推送 ID。如果我注销并重新登录(不重新启动应用程序),那么它会再次开始工作。这是一个非常间歇性的问题。

当手机无法读取已知的良好推送 ID 时,我可以存储凭据并使用新的身份验证令牌重新登录(顺便说一句,该应用程序使用由 Firebase Admin SDK 生成的自定义令牌)

问题:我是否遗漏了有关身份验证的内容?为什么在我重新登录之前,Android 应用程序会停止同步?

0 投票
0 回答
732 浏览

reactjs - Firebase-admin 和 react js

当我将 firebase admin 安装到我的项目时,我收到dns缺少依赖模块的错误。当我添加时,dns我在下面收到此错误

错误

什么可能导致此错误?

0 投票
2 回答
2431 浏览

firebase - Firebase Admin SDK initializeApp 返回 invalid_token

回报:

错误:通过“凭据”属性提供给 initializeApp() 的凭据实现未能获取有效的 Google OAuth2 访问令牌,并出现以下错误:“获取访问令牌时出错:invalid_grant(无效的 JWT:令牌必须是短期令牌并且在合理的时间框架)”。此错误的最可能原因是使用已撤销的证书密钥文件。确保您的密钥文件的密钥 ID 仍然存在于 https://console.firebase.google.com/iam-admin/serviceaccounts/project中。如果没有,请在https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk生成一个新的密钥文件 。

service_account密钥 ID 存在。

0 投票
1 回答
2921 浏览

firebase - Firebase 数据库并发数据写入

为了在 Firebase 数据库中写入数据,我在我的 android 应用程序中使用 setValue()。

我的问题是:如果同时使用 Admin API 更改值,变量的值可以更改吗?

0 投票
2 回答
851 浏览

javascript - 将用户属性设置为 firebase-admin

我有以下游戏的角色创建流程,并在服务器上使用 firebase-admin 来验证数据,我遇到的一个问题是弄清楚如何在服务器上添加用户属性,所以这是一个想法:

  • 经过身份验证的用户将字符数据发送到/queue/create
  • firebase-admin服务器监听这个变化/queue/create
  • firebase-admin接收并验证角色的数据
  • 如果成功的 firebase-admin将新的字符数据推送到/characters
  • [无法弄清楚这一点] firebase-admin像这样向用户添加属性user.updateProfile({ character: /* id of character node created by firebase-admin */ })

这里的问题是我可以访问客户端上的用户,但不能访问我的管理服务器,是的,我可以在客户端设置它,但宁愿在服务器上保留这样的逻辑。我已经在第 1 步中将 uid 与侧面字符数据一起传递,这也被添加到字符节点以进行进一步的安全验证。

编辑:我在写这篇文章时出现了一个子问题,我们能否以某种方式处理用户更改他们自己的用户个人资料数据,因为我相信这是可能的?

0 投票
1 回答
811 浏览

angularjs - 在 angularjs 中包含 firebase-admin SDK 模块

我想在 angularJS 中使用 firebase-admin,但我不知道该怎么做。

任何帮助将不胜感激。谢谢。

0 投票
1 回答
830 浏览

node.js - 在 laravel 中使用 Firebase-admin 时未找到依赖项

我在跑:

Laravel 混合版本:0.8.8

节点版本(7.5.0):

NPM 版本(4.1.2):

我正在尝试在我的 Laravel 5.4 项目中使用Firebase-adminnpm install --save firebase-admin

当我这样做require('firebase-admin');时,我resources/assets/js/app.js会运行npm run dev此错误:

我尝试了别名webpack.mix.js但没有运气

我也尝试过这样做,但也没有运气

0 投票
0 回答
131 浏览

javascript - 在 PHP 文件上获取 webhook,需要将变量传递给 JS 文件(写入 firebase)

我正在使用 PHP 文件来检索 webhook。每次传递数据时,php 文件都会解析并创建一个带有一些字符串的变量。

我有另一个写入 firebase 的 .js 文件(使用使用 firebase-admin 的服务器端)。

如何将变量传递给 .js 文件,以便将变量数据写入 fb?

PHP:

firebase_webhook.js:

0 投票
1 回答
1994 浏览

node.js - Firebase Admin SDK 的 Node.js 身份验证服务器 - JWT 验证问题

我正在做一个项目,我们将在微服务架构中使用不同的服务,并且我们还想使用一些 Firebase 服务。我正在开发一个身份验证服务器,该服务器将创建自定义 JWT,以用于 Firebase 以及其他 API 项目。

我们希望使用 Firebase Auth SDK 轻松与 FB、Google、Twitter 等集成,但我们需要用更多数据丰富用户的令牌。因此,我的想法是创建一个使用 Firebase Admin SDK 来执行此操作的 Node.JS 身份验证服务器。流程如下:

  1. 用户在客户端使用最喜欢的提供商登录
  2. 如果登录成功,用户会收到来自 Firebase 的 JWT。这被发送到身份验证服务器进行验证
  3. 如果身份验证服务器可以使用管理 SDK 验证令牌,则创建一个包含更多数据的新自定义令牌,并将此新自定义令牌返回给客户端
  4. 让客户端使用新的自定义令牌重新进行身份验证,并将其用于与 Firebase 以及我们的其他 API 项目(主要在 .NET Core 中)进行通信

步骤 1-3 工作正常。尝试验证其他服务上的自定义令牌时会出现问题

TL; DR:这里有两个问题:

  1. 验证使用 Firebase Node.JS Admin SDK 发布的自定义令牌时,我应该使用什么作为公钥?从 Google 公开的 JWK 中提取的密钥,还是从用于签名的私钥中提取的密钥?
  2. 在 JWK 方法的情况下,我应该如何构造带有kid标题的自定义令牌?

首先,我怀疑验证它的正确方法。(请原谅,我在创建 OAuth 流程方面没有经验。)使用的算法是 RS256,所以我应该能够使用公钥来验证令牌。如我所见,有两种方法可以获取此密钥:

  1. 从私钥中提取公钥并使用它进行验证。我可以这样做并在我的身份验证服务器上的测试端点上成功验证,但是我觉得这是不正确的方法
  2. 我认为另一种更正确的方法是使用令牌中的值在我的项目的 Google 的“/.well-known/openid-configuration/”端点上找到 JWK,即

https://securetoken.google.com/[项目 ID]/.well-known/openid-configuration

检索正确(密钥 ID)的指数和模数kid并从中创建公钥。

通过执行从 admin SDK 生成的令牌

一些自定义声明看起来像这样:

标题:

有效载荷:

不过,我似乎无法让方法 2 起作用。一个问题是生成的令牌没有 kid 标头,因此不符合 OpenID 规范 (AFAIK),这导致以下两种选择之一:

  1. 使用上面的第一种方法。但是这会导致问题 - 如果我出于某种原因需要撤销或重置身份验证服务器上的私钥,我需要这样做并将更改也部署到所有其他服务上,从而使解决方案的动态性降低且更容易出错.
  2. 使用 jwt.io 中提到的库之一手动生成类似的令牌,并将原始 Firebase ID 令牌中的孩子添加到其标头中。

2号问题:

  • 那么我应该把什么作为 iss、aud 和 sub 呢?与 admin SDK 的值相同吗?如果是这样,那不是“作弊”吗,因为他们不再是发行人?
  • 我已经尝试过了(生成令牌的类似副本,但添加了kid原始令牌的副本),但我似乎无法使用为孩子创建的 PEM 密钥验证生成的令牌。

我做后者的方式是这样的(遵循关于该主题的博客指南):

  1. 转到https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com并检索相关孩子的模数 (n) 和指数 (e)

  2. 使用 lib ( rsa-pem-from-mod-exp )生成公钥

  3. 使用密钥验证使用“官方”jwt lib

    上面的结果是这样的公钥:

    -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAxXpo7ChLMnv1QTovmm9DkAnYgINO1WFBWGAVRt93ajftPpVNcxMT MAQI4Jf06OxFCQib94GyHxKDNOYiweVrHVYH9j/STF+xbQwiPF/8L7+haC2WXMl2 tkTgmslVewWuYwpfm4CoQFV29OVGWCqwEcbCaycWVddm1ykdryXzNTqfzCyrSZdZ k0yoE0Q1GDcuUl/6tjH1gAfzN6c8wPvI2YDhc5gIHm04BcLVVMBXnC0hxgjbJbN4 zg2QafiUpICZzonOUbK6+rrIFGfHpcv8mWG1Awsu5qs33aFu1Qx/4LdMAuEsvX9f EmFZCUS8+trilqJbcsd/AQ9eOZLAB0BdKwIDAQAB -----END RSA PUBLIC KEY--- --

有两件事似乎是错误的。一是密钥与我可以从私钥中提取的密钥不同。另一个是我从私钥中提取的那个有这些注释:

没有'RSA'。这有关系吗?在任何情况下,它都无法验证。

最后,我是不是完全误解了 OpenID 流程?JWK 是否也是从我需要的私钥生成的,以验证我的 JWT?我是否应该在我的身份验证服务器上公开我自己的 JWK 以供其他服务联系和使用,而不是 Google 的?我对 Firebase Admin SDK 做什么和不做什么有点困惑,我想:-)

我知道这是很多问题,但我认为它们都是相关的。

我在研究中依赖的一些资源(当然除了官方的 admin sdk 文档):

0 投票
1 回答
1753 浏览

api - 后端的 Firebase 令牌验证 - 在“aud”中找不到 firebaseID。而是发送 Google 客户端 ID?

使用 Firebase Admin API 验证从后端服务器的 android 客户端获取的用户身份验证令牌时出现此错误 -

com.google.firebase.auth.FirebaseAuthException:Firebase ID 令牌的“aud”(受众)声明不正确。预期为“xxxxx”,但得到“yyyyy.apps.googleusercontent.com”。确保 ID 令牌与用于验证此 SDK 的服务帐户来自同一个 Firebase 项目。有关如何检索 ID 令牌的详细信息,请参阅https://firebase.google.com/docs/auth/admin/verify-id-tokens 。

我发现 xxxx 是 firebase ID,yyyy 是 Android 应用程序(客户端)的 google-services.json 中的 oAuthClient/clientId。

任何人都知道解决方法(或解决方法)吗?