firebase在使用php时拒绝了我的许可

时间:2013-05-01 22:23:40

标签: php firebase firebase-security

我正在尝试使用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." } 

2 个答案:

答案 0 :(得分:3)

看起来非官方的PHP / Firebase库目前不支持身份验证,(请参阅https://github.com/ktamas77/firebase-php/issues/1stackoverflow.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);