从Cloud Functions for Firebase中的数据库触发器中获取用户ID?

在下面的示例中,是否有办法获取写给/ 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);

});


梦里花落0921
浏览 432回答 3
3回答

大话西游666

如上述@Bery的回答所述,1.0.0Firebase Functions SDK 版本引入了一个新context.auth对象,其中包含诸如的身份验证状态uid。有关更多详细信息,请参见“用户身份验证信息的新属性”。原始答案(1.0.0之前的版本):是的,尽管目前尚未记录,但从技术上讲这是可能的。该uid存储与所述event.auth对象。如果从管理情况(例如,从Firebase控制台数据查看器或管理SDK)触发数据库云功能,则值event.auth是:{&nbsp; "admin": true}从未经身份验证的引用触发数据库云功能时,值为event.data:{&nbsp; "admin": false}最后,当从经过身份验证但不是管理员的参考触发数据库云功能时,其格式event.auth为:{&nbsp; "admin": false,&nbsp; "variable": {&nbsp; &nbsp; "provider": "<PROVIDER>",&nbsp; &nbsp; "provider_id": "<PROVIDER>",&nbsp; &nbsp; "user_id": "<UID>",&nbsp; &nbsp; "token": {&nbsp; &nbsp; &nbsp; // Decoded auth token claims such as sub, aud, iat, exp, etc.&nbsp; &nbsp; },&nbsp; &nbsp; "uid": "<UID>"&nbsp; }}根据上述信息,获取uid触发事件的用户的最佳选择是执行以下操作:exports.someFunction = functions.database.ref('/some/path')&nbsp; .onWrite(event => {&nbsp; &nbsp; var isAdmin = event.auth.admin;&nbsp; &nbsp; var uid = event.auth.variable ? event.auth.variable.uid : null;&nbsp; &nbsp; // ...});只要注意,在上面的代码,uid就null即使isAdmin是true。您的确切代码取决于您的用例。警告:这是目前未记录的行为,因此我将向我发出通常的警告:“未记录的功能将来可能随时更改,恕不另行通知,即使在非主要版本中也是如此。”

慕田峪7331174

为什么没有为此的公共API?似乎是一个合理的用例(我们正在探索FB作为后端,这是一个主要的悬而未决的问题)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript