我正在使用Firebase的云功能。当我使用admin.database().ref
时,将应用于数据库的所有规则被忽略。使用管理员,我可以做任何事情。要清楚:
我有一个实时数据库,其中包含一组规则,例如;名称必须是字符串,长度> = 50,...
使用SDK时起作用,所有无效数据将被拒绝。但是,当我移动使用firebase云功能(通过提供一组HTTPS端点来减少客户端的工作),它不再起作用。
所以,我想知道是否有任何方法可以使它起作用?我在想:
- 找到
admin.database()
替换的东西(看看event.data.ref
已经不起作用,在我的情况下这不起作用-http请求) - 验证云功能中的数据(不好)
您能给我一些提示/线索吗?
这是Firebase Admin SDKS的预期默认行为:代码访问具有管理特权的数据库。
如果要限制代码可以做的事情,则可以将其初始化以作为特定的UID运行。从具有有限特权的身份验证的文档中:
为了获得对Firebase应用程序实例可以访问的资源的更细粒度的控制,请在安全规则中使用唯一的标识符来表示您的服务。
...
然后,在您的服务器上,当您初始化firebase应用程序时,请使用
databaseAuthVariableOverride
选项覆盖数据库规则使用的身份对象。在此自定义AUTH对象中,将UID字段设置为您在安全规则中表示服务的标识符。// Initialize the app with a custom auth variable, limiting the server's access admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://databaseName.firebaseio.com", databaseAuthVariableOverride: { uid: "my-service-worker" } });
请参阅链接的文档以获取完整的示例。