Firebase v9 auth.Текущий пользователь равен нулю после создания пользователя

# #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 })