问题描述
我有一个管理站点,它有一个 React 前端,使用 redux 操作,使用 node.js 应用程序作为服务器,它使用 firebase-admin 来完成工作。
我想使用 firestore 的 onsnapshot 侦听器。但我不确定这在 HTTP 协议中是如何工作的?
我无法在前端应用中使用 firebase-admin,也无法在 HTTP 协议中从后端创建实时数据库功能。
目标:考虑到我的 express api 为管理员提供了一个单独的身份验证系统,因此无需通过多个身份验证过程即可从 rreact 前端在我的集合上设置快照侦听器。
有没有办法解决这个问题?
编辑: 我的客户端应用程序当前已使用 firebase Web 应用程序配置数据进行初始化,但由于我使用我自己的快速服务器对管理员进行身份验证,因此 firebase Web SDK 尚未使用 firebase 进行身份验证,因此我没有获得所需数据的权限。我不确定我是否需要一个服务帐户,或者一个需要额外设置的网络应用程序配置或什么
解决方法
我的建议是使用 signInWithCustomToken()
将 Firebase JS SDK 集成到您的客户端应用程序中。
做起来并不复杂。虽然我认为这在很大程度上取决于您当前的身份验证设置的工作方式。
总体思路是这样的:
向您的身份验证服务发送身份验证请求。
正常处理请求。
评估用户是否应该有权访问 Firebase。
如果需要,请使用 firebase-admin 创建自定义令牌并将其发送回用户。
使用客户端上的令牌向 Firebase.auth 进行身份验证
您应该确保有 Firestore 规则以允许管理员用户访问您需要的数据。
作为不使用 Firebase 客户端 SDK 的替代方案,您可以使用一个长时间运行的节点进程来打开 onSnapshot
。您的 React 应用可以使用 Server-Sent Events 或通过 WebSocket