我正在尝试使用REST使用php写入firebase,并且我一直在获得权限被拒绝
我正在使用这样的测试文件:
$url = 'https://my.firebase.url/';
$atoken = '?auth=MY FIREBASE SECRET';
$fb = new fireBase($url);
$todos = array(
'name' => 'Pick the milk',
'priority' => 1
);
$todoPath = '/test/test';
printf("Database: %s\n", $url);
printf("Sending data to %s\n", $todoPath);
$response = $fb->set($todoPath, $todos.$atoken);
printf("Result: %s\n", $response);
printf("Reading data from %s\n", $todoPath);
$response = $fb->get($todoPath);
printf("Result: %s\n", $response);
我有规则设置只有特定的授权用户“我”管理员可以写入firebase但是任何人都可以从中读取。当代码在Javascript中时这很好,因为我会登录并获得授权。但是现在它是在php中,我认为“秘密”可以使这项工作或者至少让我相信通过消防基础DOCS。
那么我做错了什么?
谢谢!
更新:
所以我改变了:
$atoken = '?auth=MY FIREBASE SECRET';
是
$atoken = '.json?auth=MY FIREBASE SECRET';
我把它放在这里:
printf("Sending data to %s\n", $todoPath.$atoken);
$response = $fb->set($todoPath.$atoken, $todos);
printf("Result: %s\n", $response);
printf("Reading data from %s\n", $todoPath.$atoken);
$response = $fb->get($todoPath.$atoken);
printf("Result: %s\n", $response);
现在我收到此错误:
04Database: https://MYDATABASE/ Sending data to /test/test.json?auth=MY FIREBASE SECRET Result: { "error" : "invalid_token: Could not parse auth token." } Reading data from /test/test.json?auth=MY FIREBASE SECRET Result: { "error" : "invalid_token: Could not parse auth token." }
答案 0 :(得分:3)
看起来非官方的PHP / Firebase库目前不支持身份验证,(请参阅https://github.com/ktamas77/firebase-php/issues/1和stackoverflow.com/questions/15953505/firebase-php-curl-authentication/15953974。
我建议您分配项目并添加.auth
方法,该方法会挂在您的令牌上,并在https://github.com/ktamas77/firebase-php/blob/master/firebaseLib.php#L63上添加.json
后自动将其添加到每个请求中。不要忘记提交拉取请求以改善其他人的库!
答案 1 :(得分:1)
REST规范似乎允许这样做。我和你一样读它。
你得到的确切错误是什么?你有没有在Forge的模拟器中验证过你可以执行这些精确的操作?
至于你的PHP代码,有一点是突出的:
您有$response = $fb->set($todoPath, $todos.$atoken);
你用$ atoken(一个字符串)连接$ todos(一个数组),这是行不通的。您的意思是使用http_build_query还是json_encode?
查看firebase-php lib,无论如何都不应该将它们变成字符串;看起来你应该这样做:
$todos = array(
'name' => 'Pick the milk',
'priority' => 1,
'auth' => MY_FIREBASE_SECRET
);
$response = $fb->set($todoPath, $todos);
或者
$todos = array(
'name' => 'Pick the milk',
'priority' => 1
);
$response = $fb->set($todoPath.$atoken, $todos);