我正在开发一个只有手动添加的用户才能访问的应用程序(我使用给定的电子邮件和密码在Firebase控制台的auth
标签中手动添加了一个用户,然后该用户可以使用移动设备登录应用)。
我想向某些用户添加“管理员”角色,然后手动添加。我听说Custom Claims
可以解决这个问题,但是我找不到在Firebase控制台中手动添加Custom Claims
的方法。
有可能吗?如果不是,那么在手动创建用户时如何添加Firebase用户角色?
谢谢!
答案 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并重新部署它。这不是一个非常精致和优雅的方法,但是可以完成工作……