Обычно я сохраняю исходную логику состояния авторизации firebase вне экземпляра Vue (но затем использую методы vue, как обычно, для взаимодействия страниц после загрузки).
Инициализируйте ваш пользовательский объект данных vue с ключами, которые вы намереваетесьиспользуйте и ищите пользовательский uid (поскольку все пользователи будут иметь это, включая анонимных пользователей) для v-if.
Вы также можете убедиться, что onAuthStateChanged был выполнен до обновления пользовательских данных (не помню, если выМожно предположить, что он будет выполнен до того, как будет создан экземпляр vue, или нет, но это гарантирует, что вы не загрузите пользовательские данные, которые появятся после создания экземпляра vue на всякий случай), имея логическое значение (например, authChecked)изменился с false на true, когда onAuthStateChanged был выполнен, и с помощью метода (который используется в 'create'), который снова и снова запускается сам с использованием setTimeout, если authChecked еще не верно.
Все это (инекоторые другие небольшие дополнения ниже) обеспечат отображение только тех данных, которые у вас есть,получите полученную ошибку и загрузят пользовательские данные, если firebase получит их после создания экземпляра vue, например
<template>
<div v-if="user.uid">
<h2>Profile</h2>
<h6 v-if="user.displayName"><b>User Name:</b> {{user.displayName}} </h6>
<h6 v-if="user.email"><b>User Email:</b> {{user.email}} </h6>
<h6 v-if="user.emailVerified"><b>User EmailVerified:</b> {{user.emailVerified}} </h6>
<h6 v-if="user.photoUrl"><b>User photoUrl:</b> {{user.photoUrl}} </h6>
<h6><b>User uid:</b> {{user.uid}} </h6>
</div>
</template>
<script>
import firebase from 'firebase'
const auth = firebase.auth()
var authChecked = false;
var user = auth.onAuthStateChanged(function(user) {
if(user) {
return user
} else {
return null
}
authCkecked = true;
})
export default {
data() {
return {
user: {
displayName: ""
email: ""
emailVerified: ""
photoUrl: ""
uid: ""
}
}
},
created() {
this.updateUser;
},
methods: {
updateUser() {
if (authChecked) {
if (user) {
this.user = user
} else {
console.log('No user')
}
} else {
setTimeout(this.updateUser, 200)
}
}
}
}
</script>