仅允许具有特定自定义声明的用户调用Firebase函数

时间:2019-02-22 09:44:11

标签: firebase google-cloud-functions firebase-admin

我有这个功能,可以为用户设置自定义声明:

export const setUserClaims = functions.https.onRequest((req, res) => {
  return admin.auth().setCustomUserClaims(req.body.uid, req.body.claims);
});

我只希望此功能对超级管理员用户可用,即由{admin: true}组成的自定义声明。

因此admin可以例如通过调用此函数来设置支持人员的用户声明。

我一直在搜索,但是没有找到一个明显的答案,即100%健壮和安全。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以创建一个HttpsCallable云函数,这样它将自动从客户端获取经过身份验证的用户,并将其与其他信息一起放入context.auth对象中。

函数可以是这样的:

async function myFunctionImpl(params, context) {

    if (!context.auth.token.admin) {
        throw new HttpsError('permission-denied');
    }
    // function code
}

export const myFunction = functions.https.onCall(myFunctionImpl);

要调用它,可以使用功能客户端。这是一个网络示例:

await firebase
      .functions()
      .httpsCallable("myFunction")({example: "hello"});

这样,如果您在客户端上对用户进行身份验证,它将把身份验证传递给函数。