Ошибка Firebase: поле photoURL должно быть действительным URL

1

Я загружаю изображения в хранилище Firebase и хотел бы сохранить их изображения как photoURL в аутентификации Firebase. Однако, когда я иду, чтобы загрузить URL изображения после использования получить подписанный URL, я получаю сообщение об ошибке

Ошибка: поле photoURL должно быть действительным URL.

Я знаю, что URL действителен, так как я проверил его с консоли. Я попытался использовать decodeURI и даже зашел так далеко, что заглянул в исходный код для отслеживания firebase-admin-node вплоть до файла с именем auth-api-reports.ts, который в строке 252 проверяет URL-адрес в функции названный validator.isURL(request.photoUrl) это привело меня к файлу, где функция определена validator.ts, которая определяет .isURL() на линии 152 в этой функции проверки выполняются на строку запрещенных символов. Я не хочу вмешиваться в исходный код Firebase, но я не могу найти никакого решения. Должно быть более простое решение для возврата из одной функции Google .getSignedURL() которая будет использоваться в качестве параметра в другом .updateUser({photoURL: }), особенно если учесть, что нельзя больше вызывать firebase.getDownloadURL() из Google узел облачных функций. Спасибо за любую помощь, которую вы оказываете в решении этой проблемы.

    var downloadURL = "";
   await admin.storage().bucket("gs://****firebase.appspot.com").file(storageRef).getSignedUrl({"action":"read","expires":Date.now() + 500*365*24*3600000}).then((value) => {
        console.log("value after requesting signed URL: " + JSON.stringify(value));
        downloadURL = value;
        return value;
    }).catch((error) => {
        console.log("error perfoming signed URL: " + error);
        return error;
    })


    const url = decodeURI(downloadURL)
    console.log("\nThe decodeURI url: " + url + "\n");

    await admin.auth().updateUser(userID,{photoURL:url}).then((user) => {
        console.log("User update ran a success: " + JSON.stringify(user));
        return true;
    }).catch((error) => {
        console.log("An error occured in getting the user: " + error);
        return error;
    });
Теги:
firebase
google-cloud-storage
google-cloud-functions
firebase-authentication

1 ответ

1
Лучший ответ

Не стоит жестко кодировать пользователей photoURL (который заполняется только для федеративных пользователей), так как он может измениться. Другими словами, пользователь Twitter может изменить фотографию своего профиля. firebase.auth() предоставляет вам новые метаданные пользователя при входе пользователя.

Это только добавляет накладные расходы на обслуживание, чтобы сохранить метаданные этого типа - нет необходимости беспокоиться об этом.

  • 0
    Спасибо за ваш ответ, я никогда не думал, что это в основном для федеративных данных. Вы правы, что при подключении photoURL к профилю пользователя auth () мало что можно получить, чего нельзя достичь, добавив еще один узел в базу данных firebase.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню