# #javascript #firebase #firebase-authentication
Вопрос:
Вот мой JS-код:
import { ref } from "vue"
import { projectAuth } from '../firebase/config'
import { getAuth, createUserWithEmailAndPassword, updateProfile } from 'firebase/auth'
const error = ref(null)
const isPending = ref(false)
const signup = async(email, password, displayName) => {
error.value = null
isPending.value = true
try {
const res = createUserWithEmailAndPassword(projectAuth, email, password)
console.log(projectAuth.currentUser)
if (!res) {
console.log('Could not complete the signup')
throw new Error('Could not complete the signup')
}
console.log(projectAuth.currentUser)
await updateProfile(projectAuth.currentUser, {displayName})
error.value = null
isPending.value = false
return res
} catch(err) {
console.log('ERROR: ' err.message)
error.value = err.message
isPending.value = false
}
}
const useSignup = () => {
return {error, signup, isPending}
}
export default useSignup
Мое приложение Vue3 вызывает функцию регистрации в этом сценарии всякий раз, когда пользователь регистрируется. Функция createUserWithEmailAndPassword выполнена успешно, и пользователь отображается в firebase. Но я также хочу добавить отображаемое имя для своего пользователя, поэтому я пытаюсь использовать функцию updateProfile для этого, но есть проблема.
Проблема в том, что projectAuth.CurrentUser равен нулю даже после создания пользователя, и я не могу понять, почему??
Комментарии:
1. Экземпляры
FirebaseError
имеютcode
свойство, которое часто более полезно, чем этоmessage
свойство. Кроме того,error.value
должен быть сам объект ошибки, а не сообщение, поскольку к ошибкам аутентификации часто прикрепляется больше данных, таких как учетные данные для объединения дубликатов учетных записей и вышеупомянутогоcode
(полезного дляswitch
обработки ошибок на основе. Кроме того, по соглашениюerror
об именах подразумевается объект, описывающий ошибку, иerrorMsg
/errorMessage
или строковое сообщение об ошибке.
Ответ №1:
createUserWithEmailAndPassword()
Метод возвращает обещание. Поскольку ваша функция такова async
, попробуйте добавить await
:
const res = await createUserWithEmailAndPassword(projectAuth, email, password)
console.log(projectAuth.currentUser)
В качестве альтернативы вы можете передать User
объект updateProfile
непосредственно из res:
const { user } = await createUserWithEmailAndPassword(projectAuth, email, password)
await updateProfile(user, { displayName })