手动添加具有自定义声明的Firebase用户

时间:2020-06-13 13:27:59

标签: firebase firebase-authentication

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

如以下answer中所述(由于无法接受,因此无法将其标记为重复):


在撰写本文时,没有任何方法可以从Firebase控制台手动添加自定义声明。您需要使用Cloud Function(或完全控制的服务器,如文档中所述的“ 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中创建一个虚拟文档。触发了云功能并设置了声明。

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

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