firebase授予我使用php时被拒绝的权限
我正在尝试使用REST使用php编写firebase,但我的权限一直被拒绝 我使用的测试文件如下: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
$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,它仍然不起作用。我现在已经完成了该项目并提交了一个拉取请求。我现在完成了该项目并提交了一个拉取请求。