创建admin web时需要firebase admin sdk吗?

Do you need firebase admin sdk when creating admin web?

我目前正在使用 firebase 开发一个小项目。我的团队成员正在 IOS 和 android 工作,而我正在尝试使用 React 构建自定义管理页面。

在该应用中,用户可以使用他们的 phone 进行注册,并通过附加一些文件来发送许可请求。

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

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

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

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

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

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

我不完全确定您在 accepting/rejecting 文件时需要执行什么操作。如果您需要 read/write 数据库的特定部分(只有管理员可以访问),那么您可以对管理员用户使用 Firebase security rules. You would have to add a Custom Claim 或将他们的 UID 存储在数据库中。

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

如何运作?

  1. You will have to create a Cloud Functions to accept/reject the documents.
  2. When the admin accepts/rejects a document, you can pass details of that user (userID, document info and if the docs were accepted to the cloud function) to the cloud function and process it over there.

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

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' 参数中的云函数中可用。