【问题标题】:Manually adding Firebase users with custom claims [duplicate]手动添加具有自定义声明的 Firebase 用户 [重复]
【发布时间】:2020-06-13 21:59:16
【问题描述】:

我正在开发一个只有手动添加的用户才能访问的应用(我在 Firebase 控制台的 auth 选项卡中使用给定的电子邮件和密码手动添加了一个用户,然后用户可以使用移动应用登录) .

我想在手动添加时为某些用户添加“经理”角色。我听说 Custom Claims 可以解决这个问题,但我找不到在 Firebase 控制台中手动添加 Custom Claims 的方法。

有可能吗?如果不是,如何在手动创建用户时添加 Firebase 用户角色?

谢谢!

【问题讨论】:

标签: firebase firebase-authentication


【解决方案1】:

如以下answer 中所述(我无法将其标记为重复,因为它尚未被接受):


在撰写本文时,无法从 Firebase 控制台手动添加自定义声明。您需要使用云功能(或您完全控制的服务器,即文档中解释的“privileged server environment”,您可以在其中使用 Admin SDK、Node.js、Java、Python、Go 或C#)。


我通常使用临时 Cloud Function 来为特定用户设置声明,如下所示:

exports.assignSpecificClaim = functions.firestore
    .document('tempoSpecificClaim/{tempoId}')
    .onCreate((snap, context) => {

        const claims = {};
        claims['admin'] = true;
        claims['batman'] = true;

        const userId = '26sn9Fvn0hNNG7cs4M1agjzhN3y2';

        return admin.auth().setCustomUserClaims(userId, claims);
    });

如您所见,此函数由在临时tempoSpecificClaim Firestore 集合中创建文档触发。

这里是如何使用它:

  • 首先,将特定的安全规则添加到 Firestore 安全规则: match /tempoSpecificClaim/{tempoDoc} {allow read, write: if false;}. 这种方式只能在 Firebase 控制台的 tempoSpecificClaim 集合中创建文档。

  • 将用户 uid 粘贴到 Cloud Function 中,重新部署它并在 Collection 中创建一个虚拟文档。触发 Cloud Function 并设置声明。

  • 完成测试后,删除 tempoSpecificClaim 集合以及相应的安全规则,删除 index.js 中的临时 Cloud Function 并重新部署它。

这不是一个非常精致和优雅的方法,但它确实可以完成工作......

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2019-08-17
    • 2020-10-24
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多