如何解决创建管理网站时是否需要 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。
这将如何运作?
- 您必须创建一个 Cloud Functions 来接受/拒绝文档。
- 当管理员接受/拒绝文档时,您可以将该用户的详细信息(用户 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 举报,一经查实,本站将立刻删除。