Получение [Ошибка: NOT_FOUND] при запуске облачной функции - PullRequest
0 голосов
/ 13 апреля 2020

Когда я вызываю функцию из моего приложения React-Native, она выдает эту ошибку: [Error: NOT_FOUND].

Я исследовал его и в соответствии с документацией Firebase это означает: " Указанный ресурс не найден или запрос отклонен по нераскрытым причинам, таким как белый список. "

Вот полное сообщение журнала консоли:

[05:51:32] I | ReactNative JS ▶ ︎ «Ошибка обработана», {[Ошибка: NOT_FOUND] │ строка: 26115, │ столбец: 28, └ sourceURL: 'http://localhost: 8081 / index.bundle? Platform = android & dev = true & minify = false '}

Реактивный код:

firebase.functions().httpsCallable('registerNewPatient')({
  email: 'bimiiix@hotmail.com',
  password: 'bbbbbb1'
}).then((onfulfilled, onrejected) => {
  if (onfulfilled) {
    console.log("OK callback function:", onfulfilled);
  } else {
    console.log("Error callback function:", onrejected)
  }
}).catch(error => { console.log("ERror handled", error) })

Облачная функция:

exports.registerNewPatient = functions.region('europe-west3').https.onCall((data, context) => {
    if (!data.email) throw "Missing email parameter";
    if (!data.password) throw "Missing password parameter";
    const email = data.email;
    const password = data.password;

    admin.auth().createUser({
        email: email,
        emailVerified: false,
        password: password,
        disabled: false
    })
        .then(function (userRecord) {
            registeredUser = userRecord.uid;
            console.log('Successfully created new user:', userRecord.uid);
        })
        .catch(function (error) {
            console.log('Error creating new user:', error);
        });
    return registeredUser;
});

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Как выделено в документах :

Примечание: Для вызова функции, работающей в любом месте, отличном от us-central1 по умолчанию, необходимо установить соответствующее значение при инициализации. Например, в Android вы бы инициализировали с помощью getInstance(FirebaseApp app, String region).

Для Firebase Javascript SDK этот метод будет firebase.app.App#functions(String region).

Таким образом, чтобы использовать облачную функцию в регионе europe-west3, как указано выше, вам нужно изменить

firebase.functions().httpsCallable('registerNewPatient')(/* ... */)

на

firebase.app().functions('europe-west3').httpsCallable('registerNewPatient')(/* ... */)

или

const functionsEUWest3 = firebase.app().functions('europe-west3');
functionsEUWest3.httpsCallable('registerNewPatient')(/* ... */)
1 голос
/ 13 апреля 2020

В дополнение к отличному ответу @samthecodingman о регионах, вы также неправильно обрабатываете асинхронные API в своем коде. К тому времени, когда ваш return registeredUser теперь работает, registeredUser = userRecord.uid еще не был вызван. Я рекомендую использовать некоторые дополнительные операторы регистрации для устранения проблем такого типа поведения в будущем.

Это должно быть ближе:

exports.registerNewPatient = functions.region('europe-west3').https.onCall((data, context) => {
    if (!data.email) throw "Missing email parameter";
    if (!data.password) throw "Missing password parameter";
    const email = data.email;
    const password = data.password;

    return admin.auth().createUser({
        email: email,
        emailVerified: false,
        password: password,
        disabled: false
    })
    .then(function (userRecord) {
        return userRecord.uid;
        console.log('Successfully created new user:', userRecord.uid);
    })
    .catch(function (error) {
        console.log('Error creating new user:', error);
        throw new functions.https.HttpsError('Error creating user', error);
    });
});
...