【问题标题】:How to restrict https google cloud function to users who just paid for a subscription如何将 https 谷歌云功能限制为刚刚付费订阅的用户
【发布时间】:2020-09-13 10:46:59
【问题描述】:

我有一个云功能,它向用户授予高级订阅令牌,如下所示:

exports.addPremiumUser = functions.https.onCall((data, context) => {

    // get user and add custom claim 
    return admin.auth().getUserByEmail(data.email).then(user => {
        return admin.auth().setCustomUserClaims(user.uid, {
            premium: true
        })
    }).then(() => {
        return {
            message: `Success! ${data.email} has been made a Premium user`
        }
    }).catch(error => {
        return error
    })
})

通常我会像这样对调用者进行身份验证(比如确保他们是管理员):

    // check request is made by admin
    if ( context.auth.token.admin !== true ) {
        return { error: 'only admins can add SMEs'}
    }

我还没有想出一个好的方法来验证这个函数的调用者。我希望这个功能只能由刚刚支付了高级订阅费用的人调用。使用我当前的实现,任何用户都可以调用此函数并免费获得高级订阅。我确信有人已经为订阅实现了令牌,所以我想知道我应该如何保护它。

【问题讨论】:

    标签: firebase google-cloud-platform firebase-authentication google-cloud-functions


    【解决方案1】:

    允许用户自己调用代码无条件修改自己的自定义声明以增强权限并不是一个好主意。

    您应该做的是有一些其他后端代码(不能由用户直接调用)在已知它们应该拥有这些权限时设置自定义声明。 由于我们不知道用户在什么时候支付了订阅费用,因此无法说出什么对您的情况有效。您必须通过分析通过您的系统的数据流,并提出某种触发器来添加自定义声明。无论您使用什么系统进行订阅,都必须连接到其中。

    【讨论】:

    • 谢谢,我要调查一下。我假设我可能不得不完全改变实现。
    • 您对 Firebase 应用程序有什么建议吗?我的后端是 firebase。
    • 正如我所说,我不知道您用于订阅的系统。您应该查阅其文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2014-11-20
    相关资源
    最近更新 更多