Firebase Admin SDK Ошибка аутентификации "TOO_MANY_ATTEMPTS_TRY_LATER" - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Firebase Admin SDK в своих облачных функциях, и я получаю ошибку случайно в некоторых выполнениях при попытке получить пользователя по uid.

let userRecord = await admin.auth().getUser(userId);

Ошибкаподробности:

{"error":{"code":400,"message":"TOO_MANY_ATTEMPTS_TRY_LATER",
 "errors":[{ "message":"TOO_MANY_ATTEMPTS_TRY_LATER",
             "domain":"global","reason":"invalid"}]
 }
}

Моя облачная функция выполняется в базе данных реального времени write и может быть запущена для нескольких пользователей.В общей сложности у меня есть 4 вызова функций аутентификации за одно выполнение: первый - выше, второй - чтобы снова получить пользователя по uid или email, третий вызов - generateEmailVerificationLink и последний вызов generatePasswordResetLink.

Я проверил ограничения скорости в документации для аутентификации, но там нет упоминания ограничения скорости для этих операций.Также ошибка TOO_MANY_ATTEMPTS_TRY_LATER была упомянута только в REST API для регистрации с паролем электронной почты.

Если эта ошибка связана с ограничением скорости, что я должен изменить, чтобы предотвратить эту ошибку, учитывая, что эти 4 вызова необходимы для операциинеобходимо для записи в базу данных?.

РЕДАКТИРОВАТЬ:

Я определил фактический вызов, который вызывает слишком много попыток ошибки.Вызовы auth().generateEmailVerificationLink() и auth().generatePasswordResetLink() выдают эту ошибку при вызове слишком много раз.

Я назвал эти два в цикле с 100 итерациями и ждал обещаний.Первое выполнение заканчивается без ошибок, т.е. 200 запросов.Но запуск второго выполнения, как только закончится первый, приведет к ошибке слишком большого числа попыток.Поэтому я думаю, что эти два звонка имеют ограничение.Сейчас я пытаюсь уменьшить эти звонки и повторно использовать информацию о ссылках.Другие звонки вроде getUserByEmail отлично работают.

let promises = [];
let auth = admin.auth();
let hrstart = process.hrtime()
for (let i = 0; i < 100; i++) {
    promises.push(auth.getUserByEmail("user email"));
    promises.push(auth.generateEmailVerificationLink("user email", {url: `https://app.firebaseapp.com/path`}));
    promises.push(auth.generatePasswordResetLink("user email", {url: `https://app.firebaseapp.com/path`}));

}

Promise.all(promises)
    .then(value => {
        let hrend = process.hrtime(hrstart);
        console.log(hrend);
        // console.log(value)
    });

1 Ответ

0 голосов
/ 20 февраля 2019

Ошибка была конкретно в операции auth.createEmailLink.Эта функция имеет следующий предел: 20QPS / IP-адрес , где QPS - это ( запрос в секунду ).Этот лимит можно увеличить, отправив сценарий использования в Firebase.

Я получил эту информацию от службы поддержки Firebase после отправки моей проблемы.

Ссылка на мою проблему на github: https://github.com/firebase/firebase-admin-node/issues/458

...