热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从CloudFunctionsforFirebase中的数据库触发器获取用户标识?

如何解决《从CloudFunctionsforFirebase中的数据库触发器获取用户标识?》经验,为你挑选了2个好方法。

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

jwngr.. 50

更新的答案(v1.0.0 +):

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

原始答案(pre v1.0.0):

是的,这在技术上是可行的,尽管目前没有记录.该uid存储与所述event.auth对象.从管理员情境(例如,从Firebase控制台数据查看器或管理SDK)触发数据库云功能时,值为event.auth:

{
  "admin": true
}

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

{
  "admin": false
}

最后,当从authed而不是admin引用触发数据库云功能时,格式event.auth为:

{
  "admin": false,
  "variable": {
    "provider": "",
    "provider_id": "",
    "user_id": "",
    "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;

    // ...
});

只要注意,在上面的代码,uidnull即使isAdmintrue.您的确切代码取决于您的使用案例.

警告:这是目前没有文档记录的行为,所以我会给出我一贯的警告:"未来的任何时候都可能会在未经通知的情况下更改未记录的功能,甚至在非主要版本中也会发生变化."



1> jwngr..:

更新的答案(v1.0.0 +):

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

原始答案(pre v1.0.0):

是的,这在技术上是可行的,尽管目前没有记录.该uid存储与所述event.auth对象.从管理员情境(例如,从Firebase控制台数据查看器或管理SDK)触发数据库云功能时,值为event.auth:

{
  "admin": true
}

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

{
  "admin": false
}

最后,当从authed而不是admin引用触发数据库云功能时,格式event.auth为:

{
  "admin": false,
  "variable": {
    "provider": "",
    "provider_id": "",
    "user_id": "",
    "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;

    // ...
});

只要注意,在上面的代码,uidnull即使isAdmintrue.您的确切代码取决于您的使用案例.

警告:这是目前没有文档记录的行为,所以我会给出我一贯的警告:"未来的任何时候都可能会在未经通知的情况下更改未记录的功能,甚至在非主要版本中也会发生变化."


为什么没有公共API的原因?看起来像一个合理的用例(我们正在探索FB作为后端,这是一个重要的突出问题).
有迹象表明这会改变或停留吗?这对我的用例来说是理想的,但如果仍然可以改变,我不想使用它.
添加了一个错误/请求来记录这个并使其成为官方公共API https://github.com/firebase/firebase-functions/issues/133

2> Bery..:

自Firebase功能达到1.0版本以来,此行为不再是未记录的,但已经轻微改变.一定要阅读文档.

已将上下文添加到云功能中,您可以像这样使用它

  exports.dbWrite = functions.database.ref('/path/with/{id}').onWrite((data, context) => {
  const authVar = context.auth; // Auth information for the user.
  const authType = context.authType; // Permissions level for the user.
  const pathId = context.params.id; // The ID in the Path.
  const eventId = context.eventId; // A unique event ID.
  const timestamp = context.timestamp; // The timestamp at which the event happened.
  const eventType = context.eventType; // The type of the event that triggered this function.
  const resource = context.resource; // The resource which triggered the event.
  // ...
});


推荐阅读
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
author-avatar
robable004_96978
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有