首页 > 解决方案 > 仅允许具有特定自定义声明的用户调用 Firebase 函数

问题描述

我有这个为用户设置自定义声明的函数:

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

我只希望超级管理员用户可以使用此功能,即由{admin: true}.

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

我一直在四处寻找,但我没有找到一个 100% 可靠且安全的明显答案。

我怎样才能做到这一点?

标签: firebasegoogle-cloud-functionsfirebase-admin

解决方案


您可以创建一个 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"});

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


推荐阅读