Доступ к медиа-объекту Firebase с помощью PHP и Firebase Auth - PullRequest
0 голосов
/ 16 января 2019

В проекте мне предоставлены конечные точки API из БД Firebase.

Для извлечения данных я аутентифицирую пользователя по электронной почте и паролю (https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-email-password), а затем подписываю каждый вызов API с помощью токена. (Эти пользователи настроены в БД Firebase)

Теперь одна из конечных точек API возвращает объекты Firebase Storage, например:

    "fileReferences": [
        {
            "id": "",
            "name": "images\/-s0m31D\/picture.jpg",
            "mediaLink": "https:\/\/www.googleapis.com\/download\/storage\/v1\/b\/BUCKET.appspot.com\/o\/images%2F-s0m31D%2Fpicture.jpg?generation=1537959346600572&alt=media",
            "selfLink": "https:\/\/www.googleapis.com\/storage\/v1\/b\/BUCKET.appspot.com\/o\/images%2F-s0m31D%2Fpicture.jpg",
            "updated": 1537959346,
            "size": 7759448
        }
    ],
  1. , когда я пытаюсь получить доступ к fileReferences.0.mediaLink, я получаю ошибку аутентификации.

  2. Если я отправлю свой токен вместе с запросом на mediaLink, мне тоже не повезет (https://cloud.google.com/storage/docs/downloading-objects#download-object-json)

  3. Я пытался использовать PHP-клиент Google API https://github.com/googleapis/google-api-php-client,, но не знал, как настроить new Google_Client() (у меня уже есть свой токен авторизации, и я ожидал, что он как-то будет работать)

$client = new \Google_Client();
$client->setAccessToken(['access_token' => $token]);

Как я могу получить доступ к медиа-файлам с помощью моего существующего токена аутентификации? (или мне нужен другой?)

Для обработки файлов я хотел бы использовать https://github.com/googleapis/google-api-php-client, как я могу заставить это работать? Любая подсказка приветствуется

Редактировать: Я получил некоторые результаты при отладке JavaScript SDK

«Все», что делает SDK, создает следующую схему URL

printf('https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/%s', urlencode('projects/-id/logo.png'));
//http[s]://firebasestorage.googleapis.com/<api-version>/b/<bucket>/o/<object-path>

Вы должны подписать вызов на https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/projects%2F-id%2Flogo.png с помощью своего заголовка токена Auth Bearer! [1] Это возвращает метаданные как это:

{
  "name": "projects/-id/logo.png",
  "bucket": "bucket.appspot.com",
  "generation": "1537960188874518",
  "metageneration": "1",
  "contentType": "image/png",
  "timeCreated": "2018-09-26T11:09:48.874Z",
  "updated": "2018-09-26T11:09:48.874Z",
  "storageClass": "STANDARD",
  "size": "40437",
  "md5Hash": "MxkOU+6feyYtdEAgKbDgp5A==",
  "contentEncoding": "identity",
  "contentDisposition": "inline; filename*=utf-8''logo.png",
  "crc32c": "o89Y9dQ==",
  "etag": "CJae8pXE2N0CEAE=",
  "downloadTokens": "32c339ff9-7e4a-42a2-890a-428f8f45d378"
}

Чтобы публично поделиться своим изображением, добавьте ? Alt = media & token = 32c339ff9-7e4a-42a2-890a-428f8f45d378

https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/projects%2F-id%2Flogo.png?alt=media&token=32c339ff9-7e4a-42a2-890a-428f8f45d378

Токен вам не нужен, если вы отправляете Auth Header!

Я не смог найти упоминаний о firebase или о том, как справиться с моей аутентификацией, в https://github.com/googleapis/google-api-php-client,, поэтому я понятия не имею, помогло бы это мне. Но я приступил к основам ...

Надеюсь, это кому-нибудь поможет, и любое прояснение очень ценится.

ВОПРОС для меня, чтобы лучше понять это все:

На что mediaLink и selfLink указывают?

[1] если доступ к хранилищу является общедоступным, подписывать его не нужно.

...