- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 firebase 中创建一个云函数,每当用户首次登录时都会触发该函数。该函数需要将来自特定用户身份验证的 UID 添加到 firestore 中特定的、已经存在的文档中。问题是需要将 UID 添加到我不知道位置的文档中。我现在拥有的代码并没有完全做到这一点,但这是它出错的部分。简化后的数据库看起来像这样
organisations
[randomly generated id]
people
[randomly generated id] (in here, a specific document needs to be found based on known email
adress)
有多个不同的组织,用户属于哪个组织是未知的。我想到了使用通配符,如下所示:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
console.log('function ready');
//Detect first login from user
//if(firebase.auth.UserCredential.isNewUser()){
if(true){
//User is logged in for the first time
//const userID = firebase.auth().currentUser.UID;
//const userEmail = firebase.auth().currentUser.email;
const userID = '1234567890';
const userEmail = 'example@example.com';
//Get email, either personal or work
console.log('Taking a snapshot...');
const snapshot = db.collection('organisations/{orgID}/people').get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.data());
});
});
}
出于测试目的,我注释掉了一些基于身份验证的行。我知道代码仍在运行,因为对 orgID 进行硬编码确实会返回正确的值。此外,遍历每个组织也不是一种选择,因为我需要有可能拥有很多组织。
很多解决方案都基于 firestore 触发器,例如 onWrite,您可以在其中使用这样的通配符。但是,我认为在这种情况下这是不可能的
上述问题的解决方法:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
//Add UID to document in DB[FMIS-94]
//Detect first login from user
//if(firebase.auth.UserCredential.isNewUser()){
if(true){
//User is logged in for the first time
//const userID = firebase.auth().currentUser.UID;
//const userEmail = firebase.auth().currentUser.email;
const userID = '1234567890';
const userEmail = 'example@example.com';
var docFound = false;
//Get email, either personal or work
console.log('Taking a snapshot...');
//Test for work email
const snapshot = db.collectionGroup('people').where('email.work', '==', userEmail).get()
.then(function(querySnapshot){
querySnapshot.forEach(function(doc){
//work email found
console.log('work email found');
console.log(doc.data());
docFound = true;
const organisationID = doc.ref.parent.parent.id;
writeUID(doc.id, userID, organisationID);
});
});
if(!docFound){
//Test for personal email
const snapshot = db.collectionGroup('people').where('email.personal', '==', userEmail).get()
.then(function(querySnapshot){
querySnapshot.forEach(function(doc){
//personal email found
console.log('personal email found');
console.log(doc.data());
const organisationID = doc.ref.parent.parent.id;
writeUID(doc.id, userID, organisationID);
});
});
}
}
async function writeUID(doc, uid, organisationID){
const res = db.collection(`organisations/${organisationID}/people`).doc(doc).set({
userId: uid
}, { merge: true });
}
这正是我所需要的,感谢大家的帮助!
最佳答案
当用户登录到您的前端应用程序时,无法触发 Cloud Functions。 Firebase Authentication triggers中没有这样的触发器.
如果您想根据用户的某些特征(uid 或电子邮件)更新文档,您可以在用户登录后从应用程序中执行此操作。
您在问题中提到,“在这里,需要根据已知的电子邮件地址找到特定文档”。您应该首先构建一个查询来查找此文档,然后更新它,所有这些都来自应用程序。
另一种经典方法是为每个用户创建一个使用用户 uid 作为文档 ID 的特定文档,例如在 users
集合中。然后很容易识别/找到该文档,因为一旦用户登录,您就知道他的 uid。
关于node.js - 在 firestore 中使用通配符获取查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63154127/
我的网址看起来像 '/api/comments/languages/124/component/segment_translation/2' 我知道 url 的哪些部分是静态的;并且是动态的 - 并且
如何使用通配符查找和替换主域之后的所有字符(包括“/”字符)? 例如,我有以下 4 行: intersport-schaeftlmaier.de/ weymouthhondapowersports.c
我有 3 个控件,其 ID 为 control_1、control_2、control_3。 我想隐藏这些控件。 目前我正在使用这个: $('#control_1').hide(); $('#cont
我有一个旧歌曲数据库,我想将其转移到新数据库。我的旧数据库看起来像这样,多个值被填充在一个用逗号分隔的字段中 SONG id | title | artist |
首先,我知道downloads表没有标准化。 我有这两个表: downloads map | author 1 | Nikola 2 | Nikola George 和 mappers mapper_
通配符可用于替代字符串中的任何其他字符。 SQL 通配符 在 SQL 中,通配符与 SQL LIKE 操作符一起使用。 SQL 通配符用于搜索表中的数据。 在 SQL 中,可使用以下通配符:
我在 shell 脚本中有一行看起来像这样: java -jar "$dir/"*.jar ,因为我只想执行该文件夹中恰好命名的 jar 文件。但这并不像我预期的那样有效。我收到错误消息: Error
我想在 Active Directory 用户的所有属性中搜索特定电话号码/分机号。 我可以像这样获取所有属性: get-aduser joesmith -Properties * 但我想过滤结果,例
我在运行 Python 3在 Windows 机器上使用 PowerShell .我正在尝试执行一个 Python 文件,然后使用通配符将多个文件(file1.html、file2.html 等)作为
我有一个 div,并且有一些处于未定义级别的子节点。 现在我必须将每个元素的 ID 更改为一个 div。如何实现? 我想,因为它们有向上的ID,所以如果父级是id='path_test_maindiv
我是 Lua 的新手,所以我现在正在学习运算符部分。在 Lua 中是否有与字符串一起使用的通配符? 我有 PHP 背景,我实际上是在尝试编写以下代码: --scan the directory's f
我在 countList 方法上遇到编译时错误。 public static void countList( List list, int count ){ for( int i =
我们需要在运行时检索多个类实例,而无需手动维护所有可用类型的列表。 可能的方法: 检索带有@xy注释的每种类型的实例 检索每种类型的实例实现接口(interface)iXY 检索每种类型的实例,命名如
我目前陷入了序言问题。 到目前为止我有: film(Title) :- movie(Title,_,_).(其中“movie(T,_,_,)”是对我的引用数据库) namesearch(Title,
我想从字符表达式(在 R 中)中删除一个“*”。在阅读帮助页面并尝试谷歌后,我无法充分理解 gsub 的复杂性。有人可以建议我该怎么做吗? 谢谢, 乔纳森。 最佳答案 您需要转义两次:一次针对 R,一
在我的 DOM 中,我有一个动态生成对话框的表。 DOM 中的对话框将具有以下形式的 ID: id="page:form:0:dlg" id="page:form:1:dlg" id="page:fo
我是 Java 新手,并且已经陷入这样一种情况,很明显我误解了它如何处理泛型,但是阅读教程和搜索 stackoverflow 并没有(至少到目前为止)让我清楚我怀疑我滥用了通配符。需要注意的是,我有
我想使用 jQuery 更改单击时图像的 src 属性。这是 HTML: View 2 在 img src 中,我想将“a”替换为“b”,但我的问题是我想忽略它前面的“1”,因为它也可能看起来像这样
我有一个 mysql 数据库,我的表是: Name | passcode ---------------------- hi* | 1111 ------------------
我想选择所有在星号所在位置具有确切 4 个“未知”字符的文档:(例如“****”可能是“2018”) foreach (string s in Directory.GetFiles(@"C:\User
我是一名优秀的程序员,十分优秀!