У меня установлена настройка аутентификации firebase, однако я пытаюсь обновить имя пользователя, прежде чем установить его в текущее состояние. Когда я запускаю все перед обновлением, все работает нормально, но у меня нет имени пользователя. Я довольно плохо знаком с обещаниями js, поэтому я попытался запустить функцию и вернуть функцию, но ни одна из них не сработала. Я ожидаю, что к тому моменту, когда на экране панели мониторинга появится имя пользователя.
Ниже приведен код для регистрации по электронной почте, который работает без имени пользователя.
магазин / пользователь / index.js
signUserUp ({commit}, payload) {
commit('setLoading', true)
commit('clearError')
firebase.auth().createUserWithEmailAndPassword(payload.email, payload.password)
.then(function (user) {
return user.updateProfile({
displayName: payload.username
})
})
.then(
profile => {
commit('setLoading', false)
const newUser = {
id: profile.uid,
name: profile.username,
email: profile.email,
photoUrl: profile.photoURL
}
commit('setUser', newUser)
}
)
.catch(
error => {
commit('setLoading', false)
commit('setError', error)
console.log(error)
}
)
}
Это код, который возвращает ошибку и не обновляет имя пользователя, пока я не обновлю.
signUserUp ({commit}, payload) {
commit('setLoading', true)
commit('clearError')
firebase.auth().createUserWithEmailAndPassword(payload.email, payload.password)
.then(function (user) {
return user.updateProfile({
displayName: payload.username
})
.then(
profile => {
commit('setLoading', false)
const newUser = {
id: profile.uid,
name: payload.username,
email: profile.email,
photoUrl: profile.photoURL
}
commit('setUser', newUser)
}
)
.catch(
error => {
commit('setLoading', false)
commit('setError', error)
console.log(error)
}
)
},
Мой взгляд действительно прост, просто отображая данные.
<template>
<div>
<h1>Dashboard</h1>
<button @click="onLogout">Logout</button>
<hr>
<app-alert v-if="error" @dismissed="onDismissed" :text="error.message"></app-alert>
<img :if="user.photoURL" :src="user.photoUrl">
<h4><b>Display Name :</b> {{ user.name }}</h4>
<h4><b>Email :</b> {{ user.email }}</h4>
<h4><b>Email Verified :</b> {{ user.emailVerified }}</h4>
<h4><b>User ID :</b> {{ user.id }}</h4>
</div>
</template>
<script>
export default {
date () {
return {}
},
computed: {
user () {
return this.$store.getters.user
},
error () {
return this.$store.getters.error
}
},
methods: {
onLogout () {
this.$store.dispatch('logout')
this.$router.push('/')
},
onDismissed () {
this.$store.dispatch('clearError')
}
}
}
</script>
Ошибки, которые я получаю, являются предупреждением о том, что
Невозможно прочитать свойство 'uid' из неопределенного
А также, имя пользователя не отображается на компоненте страницы, даже если оно отображается при обновлении страницы.
Все работает нормально, пока я не добавлю этот бит, чтобы попытаться обновить имя пользователя при создании пользователя, так что этот бит не пропустит новый обновленный объект пользователя.
.then(function (user) {
return user.updateProfile({
displayName: payload.username
})
})