Ошибка Firebase: поле photoURL должно быть действительным URL - PullRequest
0 голосов
/ 11 января 2019

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

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

Я знаю, что URL действителен, поскольку я проверил его с консоли. Я попытался использовать decodeURI и даже зашел так далеко, что заглянул в исходный код для firebase-admin-node отслеживания вплоть до файла с именем auth-api-запросы.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;
    });

1 Ответ

0 голосов
/ 11 января 2019

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

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

...