#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. Спасибо, чувак, это сработало, не могу поверить, что я этого не видел