试图通过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 ='我的秘密'