Как писать в firebase для конкретного пользователя?

#javascript #firebase #firebase-authentication

# #javascript #firebase #firebase-аутентификация

Вопрос:

Я новичок в firebase, и я смотрел на https://firebase.google.com/docs/auth Мне удалось зарегистрироваться и войти в систему с помощью firebase, где я добавляю информацию о пользователе в раздел аутентификация -> пользователи. А затем после входа в систему он перенаправляется на форму. В настоящее время форма добавляет нужные мне данные в базу данных реального времени (я заставил это работать до того, как я зарегистрировался и вошел в систему), но моя проблема в том, что данные не прикреплены / под учетной записью, с которой он вошел в систему. Итак, сейчас это просто куча случайных данных, и я не знаю, какие данные чьи. Я огляделся и не смог найти ничего о том, как соединить эти два соединения. Ниже я включил свою функцию для входа в систему и свою функцию для обновления базы данных. Спасибо за любую помощь!

 function loggingIn() {
  var notyf = new Notyf();
  console.log("Logging In");
  var email = document.getElementById("emailVal").value;
  var password = document.getElementById("passVal").value;
  console.log("Email: ", email, " Password: ", password);
  const promise = firebase.auth().signInWithEmailAndPassword(email, password);
  firebase.auth().onAuthStateChanged(function(user) {
    if (user) { // User is signed in.
      notyf.success('Logged in successfully');
      questionPage()
    } else {
      promise.catch(e => alert(e.message));
    }
  });
}

function setup(){
  //initialization and firebaseConfig is here as well
   dataMessage = firebase.database().ref('PersonData');
}
function writeUserData(activity, hours) {
  let newdataMessage = dataMessage.push();
  newdataMessage.set({
   funactivity: activity,
   sleep: hours
 });
}
 

Решение, которое я нашел, выглядит следующим образом:

 function writeUserData(activity, hours) {
  var userId = firebase.auth().currentUser.uid;
  dataMessage = firebase.database().ref('PersonData/' userId);
  let newdataMessage = dataMessage.push();
  newdataMessage.set({
   funactivity: activity,
   sleep: hours
   });
  }
 

Используя firebase.auth().CurrentUser.uid; позвольте мне добавить данные для текущего пользователя.

Ответ №1:

Вы можете построить свой почтовый маршрут для получения динамических данных, вот пример:

 let postMessageRef = firebase.database().ref(`messages/${path}`);
 

в этом случае вы бы динамически изменили путь к любому имени пользователя / независимо от ваших критериев

Тогда это делает фактический post

 postMessageRef
    .set({
        message: message,
        from: userName
    })
    .catch((err) => console.log(err))
 

Редактировать
В следующий раз я буду читать лучше…

   let userName = "placeholderToPreventDBWipes";

  const onAuthStateChanged = (user) => {
    userName = user;
  };


 ~~In this case I used useEffect, but you can throw this in your .then()~~
      useEffect(() => {
        const subscriber = auth().onAuthStateChanged(onAuthStateChanged);
        return subscriber; //unsub @ unmount
      }, []);
 

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

1. Это для приложения для обмена сообщениями, поэтому мой маршрут — сообщения / что угодно, но вы можете изменить это на что-то, что имеет смысл для вашего приложения. Маршрут определяется внутри кавычек, которые вложены в круглые скобки для .ref.

2. Спасибо за ваш ответ. У меня есть что-то подобное, но мне не хватает from: username, как мне получить моего пользователя из моей «базы данных» пользователя аутентификации (или от того, кто в данный момент вошел в систему). Благодаря вашему ответу я вижу, как только я понимаю, как заставить пользователя разделяться пользователем, это должно быть так же, как я сделал это выше с моим newdataMessage.

3. Есть несколько разных способов сделать это, я бы рекомендовал использовать useContext . Вот ссылка на документы: reactjs.org/docs/context.html

4. Если мой вопрос вам помог, я был бы очень признателен, если бы вы отметили это как решение <3

5. Есть ли какой-либо другой способ, который не использует react? (Я не знаю react). Ваш ответ немного помог, но он не ответил на мой вопрос:/ Извините (код, которым вы поделились, — это то, что у меня уже есть)