#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). Ваш ответ немного помог, но он не ответил на мой вопрос:/ Извините (код, которым вы поделились, — это то, что у меня уже есть)