微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建管理网站时是否需要 firebase admin sdk?

如何解决创建管理网站时是否需要 firebase admin sdk?

我目前正在使用 firebase 进行一个小项目。当我尝试使用 React 构建自定义管理页面时,我的团队成员正在研究 IOS 和 android。

在该应用中,用户可以通过手机注册并通过附加一些文件来发送许可请求。

我必须建立一个管理页面来批准或拒绝这些文件。为此,我需要从用户集合中获取所有用户的列表并查看提交的所有文档,并且能够将用户字段“isApproved”更新为 true 或 false。

我想直接在 firebase 中创建一个新的管理员帐户,然后使用该帐户登录管理员页面并执行以下操作(操作普通用户信息字段)。但我发现了 firebase admin SDK。 我需要在我的情况下使用它吗?

我可能需要向所有注册并稍后创建用户、更新用户删除用户帐户的用户发送推送通知

给出我应该使用 firebase admin SDK 的情况吗?

有人可以就如何设置整体结构给我建议吗?

解决方法

首先,您应该不要在前端使用 Admin SDK。 Admin SDK 拥有对所有 Firebase 资源的特权访问,也不遵循任何安全规则。您应该始终在安全环境(例如 Firebase Cloud Functions 或您自己的服务器)中使用 Admin SDK。

我不完全确定您在接受/拒绝文件时需要执行哪些操作。如果您需要读/写数据库的特定部分(只有管理员可以访问),那么您可以使用 Firebase security rules。您必须向管理员用户添加 Custom Claim 或将其 UID 存储在数据库中。

但如果您需要执行多项操作(可能向用户发送电子邮件,使用第 3 方 API 执行某些操作),我建议您使用带有 Admin SDK 的 Cloud Functions。

这将如何运作?

  1. 您必须创建一个 Cloud Functions 来接受/拒绝文档。
  2. 当管理员接受/拒绝文档时,您可以将该用户的详细信息(用户 ID、文档信息以及文档是否被接受)传递给 云函数)到云函数并在那里处理它。

可调用函数可能如下所示:

exports.verifyDocs = functions.https.onCall((data,context) => {
  const {uid,token} = context.auth
  if (!uid) return "Unauthorized"
  if (!token.admin) return "Forbidden"
  //The user is an admin
  //Do database updates
  //Any third party APIs 
});

如果您使用可调用函数,Firebase 会自动添加调用该函数的用户的身份验证信息。在上面的示例中,我假设用户将拥有一个管理员自定义声明,但如果您想根据 UID 使事情保持简单,您可以通过以下方式实现:

const adminUIDs = ["uid1","uid2"]
if (!adminUIDs.includes(context.auth.uid)) return "Forbidden"

从你的 React 应用调用函数:

const verifyDocs = firebase.functions().httpsCallable('verifyDocs');
verifyDocs({ userID: "userID",text: messageText })
  .then((result) => {
    // Read result of the Cloud Function.
  });

您在上述函数中传递的任何内容都将在您的云函数中的 'data' 参数中可用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?