如何避免在 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,
    })
  })