Вызовите облачную функцию Firebase, которая требует аутентификации с использованием service_account json в PHP - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь выполнить облачную функцию Google через PHP, но не могу подтвердить подлинность, когда все, что у меня есть, - это файл service_account json.

Я использую GuzzleHttp, поскольку функция возвращает Promise.

Что я сделал до сих пор:

<code>use Google\Auth\Credentials\ServiceAccountCredentials;
use Google\Auth\Middleware\AuthTokenMiddleware;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\HandlerStack;
use Psr\Http\Message\ResponseInterface;

$scopes = [
    'https://www.googleapis.com/auth/cloud-platform',
];
$credentials = new ServiceAccountCredentials($scopes, [
    'client_email' => "<email>",
    'client_id' => "<client_id">,
            'private_key' => "<private_key>",
        ]);
$googleAuthTokenMiddleware = new AuthTokenMiddleware($credentials);
$stack = HandlerStack::create();
$stack->push($googleAuthTokenMiddleware);
$config = array('handler' => $stack,'auth' => 'google_auth');
$httpClient = new Client($config);
$promise = $httpClient->requestAsync("POST", "<function_url>", ['json' => ['data' => ""]]);
$promise->then(
    function (ResponseInterface $res) {
        echo "<pre>";
        print_r($res->getBody());
        echo "
";}, функция (RequestException $ e) {echo"
";
        print_r($e->getRequest()->getHeaders());
        echo "
"; echo $ e-> getMessage ()." \ N "; echo $e-> getRequest () -> getMethod ();}); $ обещание-> wait ();

Ссылки:

ServiceAccountCredentials: От пространство имен Google \ Auth \ Credentials;

AuthTokenMiddleware: из пространство имен Google \ Auth \ Middleware;

HandlerStack: С GuzzleHttp

Клиент: С GuzzleHttp

Http-ответ сверху Код

`401 Unauthorized` response: {"error":{"status":"UNAUTHENTICATED","message":"Unauthenticated"}} POST

My Cloud Function

My Cloud Function выполняет проверку подлинности следующим образом:

exports.testFunction = functions.https.onCall((data, context) => {
    if (!context.auth) {
        throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
            'while authenticated.');
    }

   return "Hooraaay!";
});

Что я делаю не так? Как я могу успешно пройти проверку подлинности?

...