#javascript #firebase #firebase-authentication
#javascript #firebase #firebase-аутентификация
Вопрос:
У меня есть этот код, который мне нужен, чтобы просто вернуть uid, чтобы я мог позже использовать идентификатор для выполнения операций firestore
$(document).ready(function () {
var uid;
auth.onAuthStateChanged(function (user) {
if (user != null) {
uid = user.uid;
console.log(typeof uid)//returns a string ;
}
});
console.log(uid);
function fetch() {
var docRef = db.collection("Users").doc(uid);
docRef.get().then(function (doc) {
console.log(doc.data);
}).catch(function (error) {
console.log("Error getting document:", error);
});
}
});
Как я могу сохранить uid, чтобы позже извлечь его для операций с базой данных.
В настоящее время запуск check
функции возвращает ошибку, которая uid
не определена. То же самое, если я попытаюсь войти uid
в консоль.
Я предполагаю, что функция запускается до того, как прослушиватель разрешит, но как бы мне обойти это. Установка таймера также не помогла бы из-за разной скорости интернет-соединения между пользователями
(добавление кода)
check1();
check3();
//fetch();
function check1() {
if (typeof uid === 'undefined') {
console.log("not ready");
return false
}
}
function check3() {
if (check1 == false) {
check1();
} else {
console.log("ready"); //here this logs ready
console.log(typeof uid); //then here it logs "undefined" still
fetch(); //so this function call brings the error
}
}
function fetch() {
var docRef = db.collection("Users").doc(uid);
docRef.get().then(function (doc) {
console.log(doc.data();
}).catch(function (error) {
console.log("Error getting document:", error);
});
}
почему check3
функция ведения журнала готова, если uid
значение не определено. Мне также нужно, чтобы конкретная ссылка была скрыта до тех пор, пока uid
не получит значение.
Как я могу улучшить приведенный выше код, оставив скрытой ссылку
Ответ №1:
Ваше предположение почти наверняка верно, что вы вызываете check
до успешного завершения аутентификации. Установка таймера на самом деле не поможет, это становится пуленепробиваемым.
Поскольку мы не знаем, когда и при каких условиях вам нужно вызвать check
, трудно рекомендовать другой курс действий. По крайней мере, check
следует проверить, еще не определен ли uid, и отказаться что-либо делать, если его там нет.
Обычно пользовательские интерфейсы будут закодированы так, чтобы не позволять пользователю что-либо делать, пока он успешно не войдет в систему.