在Firebase的Cloud Functions中从数据库中获取用户标识?

在下面的例子中,有没有办法获得写给/ messages / {pushId} / original的用户的uid?

exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') .onWrite(event => { // Grab the current value of what was written to the Realtime Database. const original = event.data.val(); console.log('Uppercasing', event.params.pushId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to the Firebase Realtime Database. // Setting an "uppercase" sibling in the Realtime Database returns a Promise. return event.data.ref.parent.child('uppercase').set(uppercase); }); 

是的,这在技术上是可行的,虽然目前没有logging。 uidevent.auth对象一起存储。 从pipe理员情境(例如,从Firebase控制台数据查看器或Admin SDK)触发数据库云端function时, event.auth值为:

 { "admin": true } 

当从未经身份validation的引用触发数据库云端函数时, event.data值为:

 { "admin": false } 

最后,当一个数据库云端函数从一个auth(而不是admin)引用触发时,event.auth的格式是:

 { "admin": false, "variable": { "provider": "<PROVIDER>", "provider_id": "<PROVIDER>", "user_id": "<UID>", "token": { // Decoded auth token claims such as sub, aud, iat, exp, etc. }, "uid": "<UID>" } } 

根据以上信息,触发事件的用户的最好方法是执行以下操作:

 exports.someFunction = functions.database.ref('/some/path') .onWrite(event => { var isAdmin = event.auth.admin; var uid = event.auth.variable ? event.auth.variable.uid : null; // ... }); 

请注意,在上面的代码中,即使isAdmintrueuid也将为null 。 您的确切代码取决于您的使用情况。

警告:这是目前没有logging的行为,所以我会给出我通常的警告:“未公开的特征可能会在未来的任何时候被改变,恕不另行通知,甚至在非主要版本中。