Я только что нашел это, может быть, полезно для всех.
в файле use 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');
. В правиле аутентификации я также могу создавать правила документа в соответствии с именем электронной почты пользователя, где электронную почту пользователя можно получить с помощью идентификатор токена, который был добавлен ранее. Пример:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{email} {
allow read, write: if email == request.auth.token.email;
}
}
}