# #javascript #firebase #vue.js #google-cloud-firestore
Вопрос:
Я пытаюсь отобразить фамилию и имя из документа, сохраненного при регистрации, с помощью поля DisplayName. Я думал, что наличие DisplayName в качестве общего ключа позволит мне получить фамилию и имя пользователя, зарегистрировавшегося, отправив запрос в firestore, используя свойство DisplayName, хранящееся в объекте CurrentUser, которое возвращается после того, как я вошел в систему. Однако я не могу получить доступ к фамилии из документов firebase и был бы очень признателен за помощь.
<template>
<p>Process Payroll</p>
<h1>{{ user.displayName }} </h1>
<h1>{{ docs }} </h1>
</template>
<script>
import getUser from '@/composables/getUser'
import { ref, onMounted, watch } from 'vue'
import { projectFirestore, projectAuth } from '@/firebase/config'
import { useRouter, useRoute } from 'vue-router'
export default {
setup() {
const { user } = getUser();
watch(()=> user, () => returnUser())
const lastName = ref("");
const firstName = ref("");
const docs = ref([]);
const returnUser = async () => {
const res = await projectFirestore
.collection("users")
.where("displayName", "==", "Abe")
.get();
if (!error.value) {
// check your response here.
console.log(res);
const doc = res.filter((userObj) => {
if ("Abe" === userObj.data().displayName) {
return userObj.data().lastName;
}
});
docs.value = doc;
}
};
onMounted(returnUser)
return { user, docs, returnUser};
},
}
</script>
Вместо фамилии возвращается только пустой массив. Я также не вижу никаких запросов от firebase для получения необходимой информации. Я получаю ссылку на ошибку:ошибка не определена в моей консоли, а также не может прочитать свойство DisplayName значения null, несмотря на использование часов, чтобы убедиться, что объект пользователя загружен позже. Может кто-нибудь, пожалуйста, помочь с основными изменениями кода, чтобы помочь мне справиться с моими ошибками и отобразить фамилию из firebase. Пожалуйста, помогите! Я новичок в Vuejs.
import { ref } from 'vue'
import { projectAuth } from '../firebase/config'
// refs
const user = ref(projectAuth.currentUser)
// auth changes
projectAuth.onAuthStateChanged(_user => {
console.log('User state change. Current user is:', _user)
user.value = _user
});
const getUser = () => {
return { user }
}
export default getUser
Комментарии:
1. Здесь у вас есть только один запрос, который извлекает документы с
displayName
точностью доAbe
. Хранится ли фамилия в том же поле? Вы можете поделиться скриншотом своего документа? Кроме тогоif ("Abe" === userObj.data().displayName)
, это излишне, так как ваш запрос включает.where("displayName", "==", "Abe")
в себя .2. Строка ‘Abe’ изначально была user.DisplayName, где пользователь-это объект, который определяется при входе пользователя в систему. Я добавил скриншот документа, как вы просили
Ответ №1:
Если вы хотите зарегистрировать все комбинации «Имя фамилия», попробуйте сделать это:
const returnUser = async () => {
const res = await projectFirestore
.collection("users")
.where("displayName", "==", "Abe") // Case sensitive
.get();
const lastNameList = res.docs.map(d => `Abe ${d.data().lastName}`)
console.log(lastNameList)
docs.value = lastNameList;
}
Попробуйте изменить функцию getUser таким образом, чтобы имя дисплея всегда было определено.
const getUser = () => {
// set default value to null
return user ? { user } : { displayName: "NoUser" }
}
Комментарии:
1. Я добавил скриншот ошибок, которые я вижу в своей консоли. Я не хочу регистрировать все комбинации Имя фамилия. Только имя и фамилия, соответствующие имени пользователя.Отображаемое имя, где пользователь является текущим зарегистрированным пользователем. Мне нужна помощь в устранении ошибок, которые я вижу, и отображении user.DisplayName, для которого я настраиваю
watch(()=> user, () => returnUser())
, но я все еще не могу использовать свойство user.DisplayName.2. Я получаю сообщение об ошибке не удается прочитать родительский узел свойства null. Вы знаете, почему это может быть? @Дхармарадж
3. @BilalHussain каково значение пользователя по умолчанию
getUser
? Который не обладает этим свойством. Попробуйте изменить на<h1>{{ user.displayName ? user.displayName : "No name" }} </h1>
4. Я поделился составным файлом getUser, который возвращает пользователя, как только пользователь вошел в систему (как показано в консоли). Я прошу вас помочь мне получить имя пользователя.DisplayName в части сценария компонента. В шаблоне, где вы упомянули об изменении h1, я правильно вижу имя пользователя.DisplayName. Я прикрепил пользователя, составляемого для вашей справки. Я мог бы вызвать returnUser до того, как обратный вызов projectAuth обновит пользователя, поэтому я не могу использовать его в сценарии, но он доступен в шаблоне.
5. Это заняло у меня некоторое время, но вот хранилище для вас github.com/Bilolhussain/VueJsFirebase @Дхармарадж