試圖通過PHP cURL進行簡單讀取。如果我的安全規則讓每個人都參與進來,我可以成功地讀取數據Firebase通過REST API獲取數據PHP CURL
{
"rules": {
".read": true,
".write": true
}
}
但是,如果我限制讀/寫一個特定的用戶名,例如
{
"rules": {
".read": "auth.username == 'admin'",
".write": "auth.username == 'admin'"
}
}
我得到權限被拒絕。
的代碼如下...
require('JWT.php');
$secret = 'MY_FIREBASE_SECRET';
$data = array('username' => 'admin');
$token = JWT::encode($data, $secret);
$url = "https://MY_FIREBASE.firebaseio.com/messages.json?auth=$token";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url
));
$response = curl_exec($curl);
其值得注意的是,如果我只是用我的FB的祕密,而不是象徵性的在URL我能夠成功地讀取數據(AUTH = $祕密)。我還成功測試了使用「自定義認證」(例如, {「用戶名」:「管理員」}
我使用PHP JWT庫:https://github.com/luciferous/jwt/blob/master/JWT.php
不知道如果我得到許可被拒絕,因爲我的電話捲曲是不正確的,或者說我的構建令牌正確。我已經嘗試使用POST和GET通過捲曲,但我得到相同的結果。
任何建議,將不勝感激......
感謝您的超快速響應安德魯。我嘗試了你的建議。不幸的是,我仍然被拒絕了。這是我更新的代碼...
require('JWT.php');
$secret = 'my-secret';
$user = array('v' => 0, 'iat' => time(), 'd' => array('username' => 'admin', 'type' => 'admin', 'fullname' => 'Administrator'));
$token = JWT::encode($user, $secret);
$curl = curl_init();
$url = "https://myfirebase.firebaseio.com/messages.json?auth=$token";
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url
));
$response = curl_exec($curl);
curl_close($curl);
- 我沒有改變我們的數據.read規則 得到這個工作的「Auth = NULL!」 - 但是,這似乎並沒有十分的安全...
僅供參考我們的數據結構僅僅是
+ myfirebase
+ messages
- 000001 = "this is the 1st test message"
- 000002 = "this is the 2nd test message"
BTW:我們的應用程序只有1個用戶讀/寫數據。如果我無法讓令牌工作......有沒有更好的方法來通過REST API對呼叫進行認證,而無需在URL中傳遞我們的密鑰?例如& auth ='我的祕密'