如何避免在 algolia 上共享电子邮件,使用 Firebase 函数
How to avoid sharing Email on algolia, Using Firbase Functions
我正在使用 Firebase 函数为全文搜索应用程序创建 Algolia 索引
以下是当某人 post 在 Firebase 上时我如何创建索引:
export const onListingCreated = functions.firestore
.document('Listings/{listingId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data(),
})
})
//...snap.data() has - AdTitle:"House" Email:"example@gmail.com"
//this works well the index is created like this on algolia
但我想避免共享电子邮件
我这样试过:
export const onListingCreated = functions.firestore
.document('Listings/{listingId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data().AdTitle,
})
})
//on algolia the index was created like:
//0:H
//1:o
//2:u
//3:s
//4:e
I wanted to be AdTitle: "House"
有没有办法避免在 algolia 上共享敏感信息?
在您的例子中,snap.data().AdTitle
是字符串 House
并且您在字符串上展开,这使得您的输出对象看起来像那样。
一旦你传播了一个字符串,它就会被转换成一个数组。例如 House
被转换为 ["H", "o", "u", "s", "e"]
现在在 javascript 中数组也是对象类型所以当你尝试 {...["H", "o", "u", "s", "e"]}
它需要 ["H", "o", "u", "s", "e"]
作为 { 0: "H", 1: "o", 2: "u", 3: "s", 4: "e" }
并散布在该对象上,给出您提到的内容
let randomString = 'House'
let obj = {...randomString} //converts to array and then spreads the array
console.log(obj)
let arr = [...randomString]
console.log(arr)
let obj2 = {...arr}
console.log(obj2) //obj and obj2 give same result
相反,您可以做的是
let randomString = 'House'
let obj = {AdTitle: randomString}
console.log(obj)
或者您可以从数据对象中删除 Email
属性,然后使用您通常的实现方式
.onCreate((snap, ctx) => {
const dataObj = snap.data()
delete dataObj.Email
return index.saveObject({
objectID: snap.id,
...dataObj,
})
})
我正在使用 Firebase 函数为全文搜索应用程序创建 Algolia 索引
以下是当某人 post 在 Firebase 上时我如何创建索引:
export const onListingCreated = functions.firestore
.document('Listings/{listingId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data(),
})
})
//...snap.data() has - AdTitle:"House" Email:"example@gmail.com"
//this works well the index is created like this on algolia
但我想避免共享电子邮件
我这样试过:
export const onListingCreated = functions.firestore
.document('Listings/{listingId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data().AdTitle,
})
})
//on algolia the index was created like:
//0:H
//1:o
//2:u
//3:s
//4:e
I wanted to be AdTitle: "House"
有没有办法避免在 algolia 上共享敏感信息?
在您的例子中,snap.data().AdTitle
是字符串 House
并且您在字符串上展开,这使得您的输出对象看起来像那样。
一旦你传播了一个字符串,它就会被转换成一个数组。例如 House
被转换为 ["H", "o", "u", "s", "e"]
现在在 javascript 中数组也是对象类型所以当你尝试 {...["H", "o", "u", "s", "e"]}
它需要 ["H", "o", "u", "s", "e"]
作为 { 0: "H", 1: "o", 2: "u", 3: "s", 4: "e" }
并散布在该对象上,给出您提到的内容
let randomString = 'House'
let obj = {...randomString} //converts to array and then spreads the array
console.log(obj)
let arr = [...randomString]
console.log(arr)
let obj2 = {...arr}
console.log(obj2) //obj and obj2 give same result
相反,您可以做的是
let randomString = 'House'
let obj = {AdTitle: randomString}
console.log(obj)
或者您可以从数据对象中删除 Email
属性,然后使用您通常的实现方式
.onCreate((snap, ctx) => {
const dataObj = snap.data()
delete dataObj.Email
return index.saveObject({
objectID: snap.id,
...dataObj,
})
})