firebase授予我使用php时被拒绝的权限

firebase授予我使用php时被拒绝的权限,php,firebase,firebase-security,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 ); $todoP

我正在尝试使用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实现的,我认为“秘密”会让它起作用,或者至少firebase文档让我相信了这一点

那么我做错了什么

谢谢大家!

更新:

所以我改变了主意:

$atoken = '?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." } 

REST规范似乎允许这样做。我读的和你一样

您得到的确切错误是什么?您是否在Forge的模拟器中验证过您可以执行这些精确的操作

对于PHP代码,有一点很突出:

您有
$response=$fb->set($todpath,$todos.$atoken)

您正在将$todos(一个数组)与$atoken(一个字符串)连接起来,这是行不通的。你是想用还是

纵观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);

REST规范似乎允许这样做。我读的和你一样

您得到的确切错误是什么?您是否在Forge的模拟器中验证过您可以执行这些精确的操作

对于PHP代码,有一点很突出:

您有
$response=$fb->set($todpath,$todos.$atoken)

您正在将$todos(一个数组)与$atoken(一个字符串)连接起来,这是行不通的。你是想用还是

纵观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);

看起来非官方的PHP/Firebase库目前不支持身份验证(请参阅和)


我建议您分出项目并添加一个
.auth
方法,该方法将挂起您的令牌,并在添加
.json
之后自动将其添加到每个请求中。不要忘记提交一个请求来为其他人改进该库!

看起来非官方的PHP/Firebase库目前没有支持身份验证(请参阅和)


我建议您分出项目并添加一个
.auth
方法,该方法将挂起您的令牌,并在添加
.json
之后自动将其添加到每个请求中。不要忘记提交一个请求来为其他人改进该库!

您可以分享更多关于您的安全规则的信息吗检查
auth
变量中的特定属性将失败,因为您直接使用Firebase身份验证令牌,而不是具有特定负载的身份验证令牌。但是,任何带有
(auth!=null)的规则
将通过。或者,您可以生成一个带有
admin:true
的auth.token,让您完全绕过安全规则。这是我的安全规则:{“规则”:{“游戏”:{.read:“auth.email!='null'”,.write:“auth.email=='my@email.address“,},”用户:{“$userid”:{“.read”:“'+auth.id==$userid”,“.write”:“'+auth.id==$userid”}}}}}}基于您的新错误,我猜auth令牌是a)不是正确的,或者b)被转义。另外,考虑到firebase php使用的是通过curl的PUT-op,我认为您最好将auth令牌放到$todos中(参数)而不是在URL上。我尝试将其放入数组中,就像你说的“auth”=>“TOKEN”我被拒绝了权限。我这样尝试。json?auth'=>“TOKEN”我无法解析json错误。soken只是我从firebase内复制和粘贴的简单auth。我在firebase>auth>下使用“firebase机密”这不是我支持的令牌吗提出要使用?我尝试使用自定义令牌生成器,但从git hub下载的php代码出现错误。哦,我将规则更改为auth!==null,但仍然不起作用。您能否分享更多有关安全规则的信息?在
auth
变量中检查特定属性的规则将失败,因为您正在直接使用Firebase身份验证令牌,而不是具有特定负载的身份验证令牌。但是,任何带有
(auth!=null)
的规则都将通过。或者,您可以生成带有
admin:true
的身份验证令牌,该令牌将允许您完全绕过安全规则。这是我的安全规则:{“规则”:{“游戏”“:{”.read:“auth.email!=='null'”,.write:“auth.email=='my@email.address“,},”users:{“$userid”:“{.read”:“'+auth.id==$userid”,“.write”:“'+auth.id==$userid”}}}}}基于您的新错误,我猜auth令牌是a)不是正确的,或者b)被转义。另外,考虑到firebase php使用的是通过curl的PUT op,我认为最好将auth令牌放入$todos(参数)中,而不是URL中。我尝试将其放入数组中,就像您所说的“auth”=>“token”一样,我得到了拒绝的权限。我这样尝试过。json?auth'=>“TOKEN”我无法解析json错误。soken只是我在firebase中复制和粘贴的简单身份验证。我在firebase>身份验证>“firebase机密”下使用,这不是我应该使用的令牌吗?我尝试使用自定义令牌生成器,但从git hub下载的php代码出现错误。哦,我把规则改成了auth!==null,它仍然不起作用。我现在已经完成了该项目并提交了一个拉取请求。我现在完成了该项目并提交了一个拉取请求。