我必须更新用户声明,我更喜欢用php执行此操作。更新" displayName"或其他信息工作正常,但当我尝试在请求正文中发送自定义属性时,我得到了一个" INSUFFICIENT_PERMISSION"错误。这项操作不可行,还是仅仅是我的代码?
PHP代码:
$ch = curl_init(
'https://www.googleapis.com/identitytoolkit/v3/relyingparty'.
'/setAccountInfo?key=[API_KEY]'
);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
],
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => \json_encode([
'idToken' => [FIREBASE_ID_TOKEN],
'customAttributes' => \json_encode([
'admin' => true
]),
]),
CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
并在响应中返回完整错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "INSUFFICIENT_PERMISSION"
}
],
"code": 400,
"message": "INSUFFICIENT_PERMISSION"
}
}
我已经测试过更换' customAttributes'与' customClaims'而不是编码索赔,没有成功。全部在https连接下执行。
答案 0 :(得分:1)
要更新用户的自定义声明,通过ID令牌提供的用户凭据是不够的 - 不允许用户设置自己的自定义声明(被视为管理属性,而不是用户可编辑的属性)。
为了能够设置自定义声明,您需要使用服务帐户凭据对请求进行身份验证。此管理任务和其他管理任务由其中一个Firebase管理SDK(https://firebase.google.com/docs/admin)提供。
不幸的是,谷歌没有为PHP提供官方管理SDK - 但幸运的是,你可以在https://github.com/kreait/firebase-php找到一个非正式的管理员SDK(免责声明:我是作者:))