【问题标题】:Only allow Firebase function to be called by users with specific custom claims仅允许具有特定自定义声明的用户调用 Firebase 函数
【发布时间】:2019-02-22 09:44:10
【问题描述】:

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

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

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

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

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

我该怎么做?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 很有趣,会试试看。
    • 它有效。不要忘记正确要求 functions.https.HttpsError 否则你会得到一个 HttpsError is not defined ;-)
    猜你喜欢
    • 2020-10-26
    • 2021-09-20
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2019-03-24
    • 2014-06-18
    相关资源
    最近更新 更多