【发布时间】: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