如何将https Google Cloud功能限制为刚刚支付订阅费用的用户



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

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'}
}

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

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

相反,您应该做的是使用一些其他后端代码(用户不能直接调用(,以便在已知他们应该具有这些权限时设置自定义声明。由于我们不知道用户在什么时候支付了订阅费用,因此无法说出什么适合您的情况。您必须通过分析通过系统的数据流来弄清楚这一点,并提出某种触发器来添加自定义声明。 无论您用于订阅的任何系统

都必须挂钩。

相关内容

最新更新