为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2019-10-29 14:51:13
在下面的示例中,是否有办法获取写给/ 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);});
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

如上述@Bery的回答所述,1.0.0Firebase Functions SDK 版本引入了一个新context.auth对象,其中包含诸如的身份验证状态uid。有关更多详细信息,请参见“用户身份验证信息的新属性”。


原始答案(1.0.0之前的版本):


是的,尽管目前尚未记录,但从技术上讲这是可能的。该uid存储与所述event.auth对象。如果从管理情况(例如,从Firebase控制台数据查看器或管理SDK)触发数据库云功能,则值event.auth是:


{

  "admin": true

}

从未经身份验证的引用触发数据库云功能时,值为event.data:


{

  "admin": false

}

最后,当从经过身份验证但不是管理员的参考触发数据库云功能时,其格式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>"

  }

}

根据上述信息,获取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;


    // ...

});

只要注意,在上面的代码,uid就null即使isAdmin是true。您的确切代码取决于您的用例。


警告:这是目前未记录的行为,因此我将向我发出通常的警告:“未记录的功能将来可能随时更改,恕不另行通知,即使在非主要版本中也是如此。”


查看完整回答
反对 回复 2019-10-29
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

为什么没有为此的公共API?似乎是一个合理的用例(我们正在探索FB作为后端,这是一个主要的悬而未决的问题)

查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 431 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信