Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Firebase。关于不使用身份验证_Php_Firebase_Firebase Security_Jwt - Fatal编程技术网

Php Firebase。关于不使用身份验证

Php Firebase。关于不使用身份验证,php,firebase,firebase-security,jwt,Php,Firebase,Firebase Security,Jwt,更新 我至少能够使用firebase simple login.js和auth.login('anonymous')让客户端代码与身份验证一起工作。服务器端(即“写入”)仍然无法工作 原始问题 我正在创建一个与Firebase集成的应用程序,只需保护我的Firebase数据。如果您知道我的Firebase URL,并且不需要任何身份验证就可以删除所有内容,这显然不太理想 我并不是想让我的用户登录(或者至少不是传统意义上的登录),我只是想确保在我读写Firebase数据时进行某种身份验证。我花了几

更新

我至少能够使用
firebase simple login.js
auth.login('anonymous')
让客户端代码与身份验证一起工作。服务器端(即“写入”)仍然无法工作

原始问题

我正在创建一个与Firebase集成的应用程序,只需保护我的Firebase数据。如果您知道我的Firebase URL,并且不需要任何身份验证就可以删除所有内容,这显然不太理想

我并不是想让我的用户登录(或者至少不是传统意义上的登录),我只是想确保在我读写Firebase数据时进行某种身份验证。我花了几个小时在这上面,似乎无法使它工作(这么多的“容易”)

首先,我的Firebase安全规则-简单

{
    "rules": {
      ".read" : "auth != null",
      ".write": "auth != null"
    }
}
我正在从服务器端代码推送到Firebase,并在客户端读取结果。这是一个简单的轮询应用程序-轮询响应按以下格式推送到Firebase:
客户端\ClientA\polls\POLLID(random)\RandomDataID(来自Firebase)\Response数据
。我正在使用生成我的服务器端JWT:

    <?php

class generateFirebaseToken {
    public static function generate(array $data = array())
    {
        $key = 'FIREBASE SECRET KEY';
        $token = array(
            'iss' => 'https://example.com',
            'iat' => time()
        );
        // Add additional data to token
        $token = array_merge($token, $data);
        $jwt = JWT::encode($token, $key);

        return $jwt;
    }
}
$fb->execute()的来源

客户端也不工作。我通过对服务器端代码执行
$.getJSON
请求来检索JWT,并将其传递给Firebase。它似乎进行了正确的身份验证,但随后我收到/clients/exampleclient/polls/FdV4RM9LHcoB7U7W的错误
FIREBASE警告:on()或once():错误:权限\u拒绝:客户端没有访问所需数据的权限。
。以下是客户端代码:

    $.getJSON('/secure/jwt-token', function(json) {
        jwtToken = json.token;
        launchFirebase(jwtToken);
    });
function launchFirebase(token)
{
    var fb = new Firebase('https://myapp.firebaseio.com/clients/exampleclient/polls/' + pollID);
    fb.auth(token, function(e) {
        if(e) {
            alert('Authentication error : ' + e);
        } else {
            alert('Authenticated'); // Alert shows, so I assume authenticated
            fb.on('child_added', function(snapshot) {
                // do stuff
                // Error occurs here.
            });
        }
    });
}

我假设我在这里遗漏了一些简单的东西,也许我不明白如何使用JWT。。无论是什么情况,我们都将不胜感激。谢谢

浪费了数小时的精力,但我终于找到了问题所在,希望这能帮助其他刚刚使用Firebase的人。这也表明,如果你在同一个问题上工作了几个小时,休息一下,雾就会开始消散

好吧,问题当然很简单。我使用的是
firebase/phpjwt
库。我一切正常,除了我没有将
'd'
添加到令牌数据数组-这就是
auth
的来源。
因此,我的安全规则正在检查
auth
,因为我没有将
d
添加到令牌中而丢失

以下是固定代码:

$key = 'YOUR-SECURITY-KEY';
        $token = array(
            'iss' => 'https://EXAMPLE.com',
            'iat' => time(),
            'd' => array(
                'foo' => 'bar' // THIS GIVES YOU THE AUTH VARIABLE!!!!!
            )
        );
        // Add additional data to token
        $token = array_merge($token, $data);
        $jwt = JWT::encode($token, $key);

        return $jwt;

如果您编写代码供人们插入服务,如本例所示,请提供更好的文档。这类事情似乎常常被完全忽略,也许是因为开发人员应该从本质上知道?我最终在阅读文档时发现了答案,即在不使用帮助程序库的情况下创建令牌(如下图所示)。

在使用Firebase SDK时,如果尝试在auth中创建没有任何内容的令牌,则会抛出错误。通过使用PHP的JWT,您基本上绕过了这里的检查。考虑到您正在创建一个没有助手库的令牌,并且它显示了创建一个没有助手库的令牌的文档,我对您应该如何记录这一点感到有点困惑?很抱歉,但在我看来,我使用的是助手库。当您单击Helper Libraries下的PHP时,它将转到firebase/PHP jwt。因此,假设这是一个助手库是可以理解的。
    $.getJSON('/secure/jwt-token', function(json) {
        jwtToken = json.token;
        launchFirebase(jwtToken);
    });
function launchFirebase(token)
{
    var fb = new Firebase('https://myapp.firebaseio.com/clients/exampleclient/polls/' + pollID);
    fb.auth(token, function(e) {
        if(e) {
            alert('Authentication error : ' + e);
        } else {
            alert('Authenticated'); // Alert shows, so I assume authenticated
            fb.on('child_added', function(snapshot) {
                // do stuff
                // Error occurs here.
            });
        }
    });
}
$key = 'YOUR-SECURITY-KEY';
        $token = array(
            'iss' => 'https://EXAMPLE.com',
            'iat' => time(),
            'd' => array(
                'foo' => 'bar' // THIS GIVES YOU THE AUTH VARIABLE!!!!!
            )
        );
        // Add additional data to token
        $token = array_merge($token, $data);
        $jwt = JWT::encode($token, $key);

        return $jwt;