URL-адрес изображения, созданный в моем коде функции облака Google, возвращает 401 при добавлении тега <img /> на моем сайте? - PullRequest
0 голосов
/ 10 июня 2019

Когда изображение загружается в хранилище Firebase, я использую облачную функцию, чтобы изменить его размер.Затем я беру URL-адрес этого изображения и вставляю его в базу данных Firestore.Когда запись в БД обновляется, внешнее приложение видит это изменение и создает тег с URL-адресом, установленным как 'src'.Сетевой вызов возвращает 401.

Насколько я могу судить, мне нужно либо внести белый список доменов где-то в админ-панели Google, либо я получаю неправильный URL-адрес для начала.

КогдаЯ смотрю на файл в консоли Firebase, я получаю URL с другим доменом, чем тот, который был получен в облачной функции.Так как домен хранения отличается, было бы логично настроить белый список.Если да, то где это?

Я мог сделатьзаменить строку, и если я захожу в БД и вручную изменяю домен, первую часть пути и добавляю параметр alt=media, изображение загружается.Я надеюсь, что у кого-то есть менее хакерский ответ, чем этот.

Я настроил корзину, чтобы разрешить чтение.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
    }
  }
}

Моя облачная функция работает следующим образом: https://angularfirebase.com/lessons/image-thumbnail-resizer-cloud-function/. Вот важные части:

import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp();

export const imageResize = functions.storage
.object()
.onFinalize(async object => {
  const bucket = admin.storage().bucket(object.bucket)
  bucket.upload(imagePath, {
      destination: join(bucketDir, imageName)
    }).then(async (data) => {
      const file = data[0]
      const [imageLink] = await file.getSignedUrl({
        action: 'read',
        expires: '04-03-2100'
      })
      // also tried this
      // const [fileMeta] = await file.getMetadata()
      // const imageLink = fileMeta.selfLink

И затем я записываю его в соответствующую запись Firestore DB.Запись работает нормально, URL не работает.


Ожидается URL-адрес, полученный из file.getSignedUrl (), должен загружаться в тег изображения

Actual URL возвращает 401 при загрузке в тег изображения.

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете попробовать это решение, которое использует шаблон, отличный от стандартных примеров, которые запускаются при загрузке изображения в хранилище.

Вы можете посмотреть по этой ссылке.

Firebase Cloud Функция для изменения размера изображения в firestore create

...