#javascript #firebase #firebase-realtime-database
#javascript #firebase #firebase-realtime-database
Вопрос:
Я работаю над проектом, пытаясь получить имя текущего пользователя, который вошел в систему. Когда мы создаем пользователя, он добавляется в базу данных с уникальным идентификатором в качестве имени строки.
Здесь вы можете увидеть всех зарегистрированных пользователей, но мне нужен только тот, который вошел в систему, чтобы я мог выбрать имя и фамилию, чтобы сказать «Привет (bla) (bla)»
Код, который у меня сейчас есть, это :
import React from "react"
import { auth, database } from '../../handlers/Firebase'
export default function Dashboard() {
const user = auth.currentUser
const refUserInformation = database.ref('UserInformation/')
refUserInformation.on('value', function(data){
console.log(data.val())
})
return (
<div className="page-dashboard">
<div className="maxtext">
<p>userid: {user.uid}</p>
<p>Naam: </p>
</div>
</div>
)
}
Может ли кто-нибудь помочь мне с получением зарегистрированного пользователя (так что не цикл)
В общем, проблема в том, что в настоящее время я возвращаю всех пользователей в свой журнал консоли, но мне нужен только тот, который зарегистрирован и находится на соответствующей панели мониторинга. Я хотел бы опубликовать это имя (не с помощью цикла, а с помощью одного запроса)
Комментарии:
1. Я бы предпочел использовать аутентификацию firebase вместо этого, это сэкономит много времени, если вы хотите сделать это таким образом, тогда вам придется хранить пользователя в сеансе, файлах cookie или локальном хранилище. На YouTube есть много руководств, основанных на том, что вы спрашиваете, чтобы вы могли их проверить.
2. Я понимаю вас, но мы уже используем auth, но мы не хотим зацикливать пользователей, мы просто хотим выполнить одну выборку из 1 пользователя, а не вводить всех пользователей сразу
Ответ №1:
Чтобы получить только пользователя с заданным user_id
значением, вам придется использовать запрос:
const refUserInformation = database.ref('UserInformation/')
const currentUserQuery = refUserInformation.orderByChild('user_id').equalTo(user.uid);
currentUserQuery.on('value', function(snapshot){
snapshot.forEach((data) => {
console.log(data.val())
});
})
В общем, я бы рекомендовал хранить информацию о пользователе с UID в качестве ключа. Таким образом:
- Каждый UID по определению может встречаться в базе данных только один раз, поскольку ключи уникальны для родительского узла.
- Поиск информации о пользователе по их UID становится проще, поскольку вам не понадобится запрос.
Чтобы сохранить пользователя под своим UID, используйте refUserInformation.child(user.uid).set(...)
вместо refUserInformation.push(..)
.