Firebase проверяет две разные ссылки на базу данных, несмотря на проверку if

#javascript #firebase #firebase-realtime-database

#javascript #firebase #firebase-realtime-database

Вопрос:

Я пытаюсь разделить два разных входа для разных типов пользователей, которые находятся в учетной записи. Один из пользователей — обычный пользователь, который может выполнять поиск через приложение. Другой — это бизнес-панель мониторинга, где компании могут видеть, какие пользователи зарегистрированы для их бизнеса.

Проблема в том, что когда я проверяю свои две разные ссылки на базу данных, кажется, что она проверяет их обе вместо проверки первой проверки и переходит к извлечению и ошибке, сообщающей, что один из моих узлов равен null.

Случай, когда это явно не удается, является первой проверкой if, но в моей базе данных node UserType установлен правильно:

Проблема, похоже, в том, что auth().onStateChanged где он ищет uid в обеих ссылках на базу данных. Когда я пытаюсь войти в систему с бизнес-учетной записью, он успешно вводит это утверждение и перенаправляет, когда я вхожу в систему с учетной записью пользователя, он пытается проверить бизнес-ссылки, если и затем выдает ошибку userType is null cannot read

введите описание изображения здесь

 firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      // This prompts the user to allow for location access
      // When logged in it would allow us to show the 
      // nearby businesses to the user 
      var uid = user.uid
      if(window.navigator.geolocation) {
        window.navigator.geolocation.getCurrentPosition(function(position){
          
        })
      }

      var uid = user.uid
      console.log(uid)
      business.child(uid).on("value", snap => {
        if(snap.val().userType == "business") {
          alert("This is not a consumer account!")
          firebase.auth().signOut()
          window.location.href = "businesslogin.html"


        } else {
          consumer.child(uid).on("value", snap => {
            if(snap.val().userType == "consumer") {
              if(snap.val().isPhoneVerified == true) {
                window.location.href = 'nearbyBusinesses.html'
              } else {
                window.location.href = 'loginVerification.html'
              }
              if(snap.val().isUserCheckedin == true){
                window.location.href = "leave.html"   '#'   snap.val().checkedInBusinessId
              } else {
                window.location.href = "nearbyBusinesses.html"
              }
            } 
          })
        }
      }) 
  
    }
})
  

Комментарии:

1. Можете ли вы точно описать, что происходит при пошаговом выполнении этого кода (установка точек останова в первой строке любого обратного вызова? Какая строка в этом случае не выполняет то, что вы ожидаете от нее?

2. В случае if(snap.val().userType == "business) этой строки всегда выводится ошибка со словами Uncaught TypeError: Cannot read property 'userType' of null

3. В итоге я отредактировал свой вопрос, добавив дополнительную информацию

Ответ №1:

Ошибка находится в этой строке if(snap.val() == "business") . Это должно быть if(snap.val().userType == "business") . По крайней мере, это то, что я могу видеть сразу. Попробуйте это и посмотрите, решит ли это вашу проблему

Комментарии:

1. К сожалению, это не решило проблему. Я все еще получаю ошибку Uncaught TypeError: Cannot read property 'userType' of null

2. о, я забыл. Попробуйте это if(snap.val() amp;amp; snap.val().userType == "business") . Это проверит, действительно ли привязка содержит данные, прежде чем пытаться получить доступ userType

3. Спасибо, чувак, это сработало, не могу поверить, что я этого не видел