问题描述
文档的"Extend with Cloud Functions"部分说:
Cloud Functions在受信任的环境中执行,这意味着它们被授权为您项目中的服务帐户。您可以使用Firebase Admin SDK进行读取和写入:
API reference for rules说request.auth
将包含uid和令牌映射。 firebase.identities
和firebase.sign_in_provider
似乎都没有包含“ serviceAccount ”键来指定如何授权请求。
用例:我已经为用户实现了基于角色的机制,并且希望允许对某些角色和allow delete: if request.auth.uid != null && isOneOfRoles(['super-admin','admin']);
进行操作。我不能仅仅依靠检查request.auth.uid != null;
。
解决方法
使用firebase-admin
SDK从Cloud Functions发出的请求将不接受安全规则的评估。他们使用服务帐户授权,这意味着他们无需遵守规则。
如果您想作为用户授权并通过安全规则保护您的写入,则可以尝试使用Cloud Functions中的Web SDK。您可以使用自定义身份验证来创建要在Cloud Functions中使用的用户帐户,尽管这样做可能会减慢速度,因为在使用SDK之前,您必须在每个函数调用中进行身份验证。