Как сгенерировать ошибку в вызываемой облачной функции Firebase? - PullRequest
2 голосов
/ 13 февраля 2020

Я пытаюсь создать нового пользователя в Firebase, используя функцию вызываемого облака. Всякий раз, когда возникает ошибка (например, адрес электронной почты недействителен), функция всегда возвращает ту же самую ошибку crypti c моему приложению Firebase независимо от того, что я делаю:

{"error":{"status":"INTERNAL","message":"INTERNAL"}}

В консоли Firebase я также получаю это:

Unhandled error Error: Unknown error status: auth/invalid-email

Что не имеет особого смысла, так как я на самом деле обрабатываю ошибку. Это код облачной функции:

exports.createUser = (data, context) => {
    return admin.auth().createUser({
        email: data.email,
        password: data.password
    }).catch((error) => {
        throw new functions.https.HttpsError(error.errorInfo.code, error.errorInfo.message);
    });
}

Как показано, я пытался использовать throw functions.https.HttpsError, что в документации предлагает .

I ' Мы также пытались return functions.https.HttpsError или даже выдавали свою ошибку с тем же результатом.

Я использовал try / catch с await вместо использования then() и catch(). Тот же результат. Консоль функций все еще информирует меня, что ошибка не обрабатывается, что абсурдно.

Так как я могу выдать правильную ошибку своим пользователям при использовании функции вызываемого облака?

1 Ответ

3 голосов
/ 13 февраля 2020

Похоже, вы пытаетесь передать код ошибки от Admin SDK дословно, но это недопустимая стратегия. Внимательно прочитайте документацию - он отправляет вас в документацию API для HttpsError , чтобы найти список кодов ошибок, которые допустимы для отправки. Свойство code ссылается на FunctionsErrorCode , который показывает список допустимых кодов:

"ok" | "отменено" | "неизвестный" | "неверный аргумент" | "крайний срок превышен" | "не найден" | "уже существует" | "разрешение отказано" | "истощенный ресурс" | "провал-предварительное условие" | "прервано" | "вне диапазона" | "невыполненный" | "внутренний" | "недоступен" | «потеря данных» | «unauthenticated»

Admin SDK выдает «auth / invalid-email», который здесь недопустим. Вам придется перевести это в один из действительных кодов. Возможно, «неверный аргумент» может быть уместным. Это будет переведено далее в числовой код ответа HTTP, который вы получите на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...