JSON отправка строки не определена при попытке установить пользовательское требование через функцию firebase - PullRequest
1 голос
/ 18 февраля 2020

Кто-нибудь может увидеть, что я здесь делаю не так? Я использую Firebase, я отправляю данные в мою облачную функцию здесь

window.addEventListener("load", function load(event) {

    firebase.auth().onAuthStateChanged(function (user) {
        if (user) {
            let user = firebase.auth().currentUser;
            let userInfo = db.collection("Users").doc(user.uid);



            userInfo.get().then(function (doc) {
                if (doc.exists) {

                    let userEmail = firebase.auth().currentUser.email
                    var xhttp = new XMLHttpRequest();

                    xhttp.open(
                        "POST",
                        "https://us-central1-******.cloudfunctions.net/addMRole",
                        true
                    );
                    xhttp.setRequestHeader("Content-Type", "application/json");
                    xhttp.send(
                        JSON.stringify({
                            email: userEmail,
                            uID: user.uid
                        })
                    );
                    console.log("should still be working HOPEFULLY HERE YOU ARE")


                }
            });

        }

    });

});

, и я отправляю их в мою облачную функцию здесь

exports.addMRole = functions.https.onRequest((req, context) => {

  let email = req.email;
  let uiD = req.uID

  console.log(email)
  console.log(uiD)

  return admin.auth().getUserByEmail(email).then(user => {

    return admin.auth().setCustomUserClaims(uiD, {

      member: true


    });
  }).then(() => {
    return {
      message: `success! ${req.email} is now a member!`
    }
  }).catch(err => {
    console.log(err)
    return err;
  });
});




Но по какой-то причине они отправляются как не определено для функции облака по какой-то причине. Мне не нравится, как я его отправляю. Похоже, что его не устраивает дом. Я отправляю его с первого кода здесь


xhttp.send(
                        JSON.stringify({
                            email: userEmail,
                            uID: user.uid
                        })
                    );

И консоль userEmail / user.uid прекрасно регистрируется перед отправкой, но затем в функции, когда я регистрируюсь здесь

console.log(email)
  console.log(uiD)

показывает, что оно отправлено как неопределенное в моих журналах функций. Так запутанно лол. Я в основном отправляю пользователям электронную почту и UID в свою облачную функцию, и я хочу изменить их пользовательское требование на пользователя. Это странно, потому что у меня это работало, потом я что-то сделал и теперь не могу понять, как заставить это работать снова, понятия не имею, где я запутался в этом, лол. Спасибо за помощь <3 </p>

1 Ответ

2 голосов
/ 18 февраля 2020

Это не правильно:

let email = req.email
let uiD = req.uID

Это будет всегда быть неопределенным, как вы сейчас это написали. Если вы хотите получить доступ к свойствам JSON объекта, который вы публикуете в функции HTTP, вы должны сделать это следующим образом, как показано в документации :

let email = req.body.email
let uiD = req.body.uID

Вкл. Кроме того, ваша функция также не отправляет ответ вызывающей стороне. Как структурировано сейчас, он может выполнять свою работу, но он всегда будет превышать 60 секунд по умолчанию. То, как вы просто возвращаете ответ из обратного вызова then, не будет работать. Кажется, вы можете смешивать триггеры типа HTTP с триггерами вызываемого типа, которые имеют разные способы отправки ответа. Поскольку вы пишете триггер типа HTTP, вы должны следовать инструкциям по отправке ответа, чтобы правильно завершил функцию HTTP .

...