首页 > 解决方案 > Firebase 可调用函数检查数据参数的类型

问题描述

我有一个可以更新数据库中用户的 firebase 可调用函数。
我想检查从前端收到的对象数据的类型。

这是对象:

{ "data": 
    { "user": 
        {
        "displayName": "Flo",
        "email": "flo@gmail.com",
        "phoneNumber": "+33",
        "photoURL": "",
        "providerId": "fdgfg",
        "uid": "2",
        "lastSignInTime": "dddf",
        "creationTime": "sdfd",
        "isEmailVerified": true
        } 
    }
}

这是可调用函数:

exports.updateUser = functions.https.onCall((data: { user: User }, context) => {
  const user = data.user
  if (context.auth != null && instanceOf(user)) {
    db.doc(${USERS_DB_NAME}/${context.auth?.uid}).set(JSON.parse(JSON.stringify(user)))
    return new SuccessResponse<Message>({ message: SUCCESS_MESSAGE }).toResponse()
  } else {
    return new ErrorResponse('permission-denied', PERMISSION_DENIED_MESSAGE).toResponse()
  }
})

这是应该检查类型的函数:

static instanceOf(object: any): boolean {
    const properties = ['displayName', 'email', 'phoneNumber', 'photoURL', 'providerId', 'uid', 'lastSignInTime', 'creationTime', 'isEmailVerified']
    return Object.keys(object).every(v => properties.includes(v))
  }

问题是:

我已经看到我可以将所有属性放在 const 变量中,如下所示:

const displayName = data.user.displayName
const email = data.user.email
...

但这不是一个真正干净的解决方案

标签: angulartypescriptfirebasegoogle-cloud-functions

解决方案


这是目前我在使用 Firebase Cloud Functions 时遇到的一个错误,来自的数据onCall正在返回一个嵌套的数据对象

data: {data: payload}

当前的解决方法是重新声明数据,如下所示:

incomingData = data.data? data.data: data;

与此同时,它应该很快就会修复 - 您可以自己跟踪它:

if (data.data) console.error("data.data is still a thing")

推荐阅读