可以通过Firebase REST API更新自定义用户声明吗?

时间:2018-04-06 13:10:47

标签: php firebase firebase-authentication

我必须更新用户声明,我更喜欢用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连接下执行。

1 个答案:

答案 0 :(得分:1)

要更新用户的自定义声明,通过ID令牌提供的用户凭据是不够的 - 不允许用户设置自己的自定义声明(被视为管理属性,而不是用户可编辑的属性)。

为了能够设置自定义声明,您需要使用服务帐户凭据对请求进行身份验证。此管理任务和其他管理任务由其中一个Firebase管理SDK(https://firebase.google.com/docs/admin)提供。

不幸的是,谷歌没有为PHP提供官方管理SDK - 但幸运的是,你可以在https://github.com/kreait/firebase-php找到一个非正式的管理员SDK(免责声明:我是作者:))