Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
Google cloud firestore 使用身份验证规则设置的Firestore PHP SDK_Google Cloud Firestore_Firebase Authentication_Firebase Security - Fatal编程技术网

Google cloud firestore 使用身份验证规则设置的Firestore PHP SDK

Google cloud firestore 使用身份验证规则设置的Firestore PHP SDK,google-cloud-firestore,firebase-authentication,firebase-security,Google Cloud Firestore,Firebase Authentication,Firebase Security,我是Firebase新手,现在我想尝试Firestore php SDK并实现Firestore身份验证规则。下面的当前代码工作正常 use Google\Cloud\Firestore\FirestoreClient; $db = new FirestoreClient(); $db->collection('mycollectionname') ->document('mydocumentname') ->set(['name'=>'aaa','

我是Firebase新手,现在我想尝试Firestore php SDK并实现Firestore身份验证规则。下面的当前代码工作正常

use Google\Cloud\Firestore\FirestoreClient;

 $db = new FirestoreClient();
 $db->collection('mycollectionname')
    ->document('mydocumentname')
    ->set(['name'=>'aaa','value'=>'111');
Firestore验证规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {

      // before change
      allow read, write: if true;

      // after change
      allow read, write: if request.auth.uid != null;

    }
  }
}
true更改为request.auth.uid!=null,它的“给我”错误:

{ "error": { "code": 403, "message": "Missing or insufficient permissions.", "status": "PERMISSION_DENIED" } }

我可以弄清楚如何获取用户数据,如:电子邮件和密码或用户id令牌,如何使用用户数据解决上述错误

我刚找到它,可能对任何人都有用

在文件
中使用Google\Cloud\Firestore\Connection\Grpc
我做了一些改变:

......
......

    private function addRequestHeaders(array $args)
    {
        $args += [
            'headers' => []
        ];

        $args['headers']['google-cloud-resource-prefix'] = [$this->resourcePrefixHeader];


        /////////  CODE THAT I ADD ///////////
        if(session('user_token'))
        {
            $args['headers']['Authorization'] = ['Bearer '.session('user_token')];
        }
        /////////  CODE THAT I ADD ///////////

        // Provide authentication header for requests when emulator is enabled.
        if ($this->isUsingEmulator) {
            $args['headers']['Authorization'] = ['Bearer owner'];
        }

        return $args;
    }
使用laravel,我可以检查会话,在头上添加一个承载令牌。在使用上述示例之后,我在使用Firestore函数之前添加了一个会话

use Google\Cloud\Firestore\FirestoreClient;

 /// adding session
 session(['user_token'=>'eyJhbGciOiJSUzI1................']);

 $db = new FirestoreClient();
 $db->collection('users')
    ->document('test@gmail.com')
    ->set(['name'=>'aaa','value'=>'111');
在auth规则中,我还可以根据用户的电子邮件名称制定文档规则,其中可以使用之前添加的令牌id获取用户的电子邮件。例如:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{email} {
       allow read, write: if email == request.auth.token.email;
    }
  }
}

使用这篇文章给了我想要的结果:但我想要使用当前的FireStoreSDK,它解析FirestoreClient()上的身份验证数据