Я загружаю изображения в хранилище 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;
});
Не стоит жестко кодировать пользователей photoURL (который заполняется только для федеративных пользователей), так как он может измениться. Другими словами, пользователь Twitter может изменить фотографию своего профиля. firebase.auth()
предоставляет вам новые метаданные пользователя при входе пользователя.
Это только добавляет накладные расходы на обслуживание, чтобы сохранить метаданные этого типа - нет необходимости беспокоиться об этом.