Облачная функция firebase, использующая getSignedUrl для миниатюр, истекает через неделю, нет четкой причины, почему? - PullRequest
0 голосов
/ 04 мая 2019

Я могу успешно сгенерировать подпись для моих созданных миниатюр, но примерно через неделю они перестают работать ...

Я не получаю никаких ошибок или информации о том, почему онисрок действия истекает, просто они.

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

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

Воткак мы генерируем SignUrl с облачными функциями Firebase:

    export const generateThumbs = functions.storage
      .object()
      .onFinalize(async object => {
          const fileBucket = object.bucket; // The Storage bucket that contains the file.
          const filePath = object.name; // File path in the bucket.
          const fileName = filePath.split('/').pop();
          const userUid = filePath.split('/')[2];
          const sizes = [150, 256];
          const bucketDir = dirname(filePath);

          if (!filePath.startsWith('categories/')) {
            console.log('This is not in the categories directory.');
            return false;
          }

          if (fileName.includes('thumb@') || !object.contentType.includes('image')) {
              console.log('exiting function');
              return false;
            }

          const bucket = gcs.bucket(fileBucket);
          const tempFilePath = path.join(tmpdir(), fileName);

          return bucket.file(filePath).download({
            destination: tempFilePath
          }).then(() => {

          sizes.map(size => {      
              const newFileName = `thumb@${size}_${fileName}`
              const newFileTemp = path.join(tmpdir(), newFileName);
              const newFilePath = `thumbs/${newFileName}`

              return sharp(tempFilePath)
                .resize(size, size)
                .toFile(newFileTemp, () => {

                  return bucket.upload(newFileTemp, {
                      destination: join(bucketDir, newFilePath),
                      metadata: {
                          contentType: 'image/jpeg'
                        }
                  }).then((data) => {
                      const file = data[0]
                      file.getSignedUrl({
                        action: 'read',
                        expires: '03-17-2100'
                      }, function(err, url) {
                        if (err) {
                          console.error(err);
                          return;
                        }
                        if (size === 150) {
                          return admin.database().ref('profileThumbs').child(userUid).child(fileName).set({ thumb: url });
                        } else if (size === 256) {
                          return admin.database().ref('categories').child(fileName).child('thumb').set(url)
                          .then(() => {
                            admin.database().ref('categories').child(fileName).child('tempThumb').remove();
                          })
                        }
                      })
                    })
                })
            })
          }).catch(error =>{
              console.log(error);
            });
        })

После установки даты истечения срока действия на 03-17-2100, мы не ожидаем такого поведения, но, как я уже сказал, я чувствую, что егочто-то делать с разрешениями gcs - я пытался связаться с ними, но примерно через неделю я все еще жду их ответа.

Я ценю все отзывы!

...