Я пытаюсь выполнить облачную функцию 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!";
});
Что я делаю не так? Как я могу успешно пройти проверку подлинности?