首页 > 解决方案 > 收到“未经授权的请求”。在 PHP 中使用 Firebase Authentication 提供的令牌

问题描述

我正在更新我的 firebase 实时数据库中的记录,因此我必须在更新之前对用户进行身份验证。获得令牌然后想要更新但它给了我“未经授权的访问”。错误。我已关注此链接中的文档。

这是我的数据库规则

{
 "rules": {
   ".read": "true",
   ".write": "false"
 }
}

这是我通过电子邮件和密码进行身份验证并获取令牌的方式

$curl = curl_init();

curl_setopt_array($curl, array(
   CURLOPT_URL => 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]&email=[EMAIL]&password=[PASSWORD]&returnSecureToken=true',
   CURLOPT_RETURNTRANSFER => true,
   CURLOPT_ENCODING => '',
   CURLOPT_MAXREDIRS => 10,
   CURLOPT_TIMEOUT => 0,
   CURLOPT_FOLLOWLOCATION => true,
   CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
   CURLOPT_CUSTOMREQUEST => 'POST',
   CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Content-length: 0'
   ),
));
$response = curl_exec($curl);
curl_close($curl);
$aResponse = json_decode($response);
$sToken = $aResponse->idToken;

很好,现在我得到这个令牌并将它传递给另一个 curl 请求以更新我的 firebase 数据库中的记录,它给了我这个“未经授权的请求”错误。

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://[DB_URL].firebaseio.com/time.json?access_token=' . $sToken,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'PATCH',
  CURLOPT_POSTFIELDS =>'{
    "digitalServices": "1552483790"
}',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer ' . $sToken,
    'Content-Type: application/json'
  ),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;

请告诉我我在这里缺少什么。

标签: phpfirebasefirebase-realtime-databasefirebase-authenticationphp-curl

解决方案


推荐阅读