为无服务器 Firebase 应用的用户分配角色

Posted

技术标签:

【中文标题】为无服务器 Firebase 应用的用户分配角色【英文标题】:Assign roles to users for serverless firebase app 【发布时间】:2020-09-06 22:57:15 【问题描述】:

我在 React 中有一个使用 firebase firestore 的无服务器应用程序。

应用程序以编程方式创建新用户,并将数据保存到名称与新创建的用户 ID 相同的文档中。

firebase.auth().createUserWithEmailAndPassword(
        customerEmail.current.value, 
        customerPassword
    ).then(function(user) 
        console.log("UID!!!!!!!!!!!!!!!!!!!!!!!", user, user.user.uid)
        firebase
        .firestore()
        .collection('sessions')
        .doc(user.user.uid).set(
            ...context.state
        ).then(() => 
            console.log("DATA SAVED SUCCESSFULLY!")
        )
    )

接下来我想在创建这些用户时分配角色。

我真的想使用 admin sdk 为这些用户分配自定义声明 - 有没有办法在保持无服务器的同时做到这一点?

如果没有,有什么替代方案?

【问题讨论】:

【参考方案1】:

您确实需要为此使用 Admin SDK。

如dedicated section of the doc 中所述,“自定义声明应由 Firebase Admin SDK 从特权服务器环境中设置”。

对于“特权服务器环境”,文档是指您完全控制的服务器或 Firebase 项目中的云函数,它运行后端代码(并且您也可以控制,因为它位于您自己的项目)。

Cloud Functions 是“一个无服务器框架,可让您自动运行后端代码以响应由 Firebase 功能触发的事件”。

例如,使用 Admin Node.js SDK,您只需调用 setCustomUserClaims() 方法,传递用户的 uid 和一个定义要设置的声明的对象。

在您的情况下,您很可能应该在创建用户时触发 Cloud Functions,请参阅对应 doc 的 Cloud Functions。


您没有详细说明要分配的角色类型。如果有不同的可能角色,您将需要一种方法来决定将哪些角色分配给哪个用户。

您可能对以下article 感兴趣,我写在“如何创建管理模块以管理用户访问和角色”

【讨论】:

那么我需要创建一个网络服务器吗? admin sdk 似乎不适用于 React?我得到无法解析“http2” 不,您不需要创建 Web 或应用程序服务器。如上所述,所有这些都可以通过Cloud Functions 完成,“一个无服务器框架,可让您自动运行后端代码以响应由 Firebase 功能触发的事件”

以上是关于为无服务器 Firebase 应用的用户分配角色的主要内容,如果未能解决你的问题,请参考以下文章

如果我为无符号变量分配负值会发生啥?

处理用户角色

将numpy数组设置为无释放内存吗?

分配 GCP 函数服务帐号角色以使用 Terraform 与 Firebase 互动

我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 它返回无

通过 API 网关为无服务器架构模型代理端点设置 CORS