# #reactjs #typescript #firebase #react-native #firebase-authentication
#реагирует на #машинописный текст #огневая база #реагировать-родной #firebase-аутентификация
Вопрос:
Я пытаюсь зарегистрировать пользователя, а затем updateUserProfile
с помощью так называемой функции.
Сначала у меня возникла проблема с type
пользователем, которую я решил , импортировав User
тип из firebase, и я проверяю, есть ли currentUser
, чтобы удовлетворить эту null
возможность.
Я думаю, что проблема в этой последней проверке, потому что содержимое функции не запускается. А именно, я думаю, что пользователь еще не зарегистрирован.
Примечание: если я это сделаю: const user: User = this.auth.currentUser;
Я попадаю в updateProfile(user)
эту ошибку type 'User | null' is not assignable to type 'User'.
Если я это сделаю: const user: User | null = this.auth.currentUser;
Я получаю эту ошибку:
Argument of type 'User | null' is not assignable to parameter of type 'User'.
Вот почему я закончил проверку вот так:
if (this.auth.currentUser) { const user: User = this.auth.currentUser;
Так как же я могу заставить это работать?
Вариантом может быть регистрация onAuthStateChanged
на home
экране после регистрации , а затем запуск updateUserProfile
, где я передам имя, которое я бы при регистрации просто сохранил в redux.
В Firebase-v8 я мог updateUserProfile
бы просто createUserWithEmailAndPassword
функционировать. Я уверен, что должен быть способ сделать это также в версии 9, но и с Typescript
тоже.
Любая помощь будет признательна.
Спасибо
import { createUserWithEmailAndPassword, getAuth, sendPasswordResetEmail, updateProfile, User } from 'firebase/auth'; async signUp(email: string, password: string, name: string) { createUserWithEmailAndPassword(this.auth, email, password) .then(async userCredential =gt; { console.log('userCredential', userCredential); await this.updateUserProfile(name); }).catch((error) =gt; { const errorCode = error.code; const errorMessage = error.message; }) } async updateUserProfile(name: string) { if (this.auth.currentUser) { const user: User = this.auth.currentUser; updateProfile((user), { displayName: name, photoURL: `https://gravatar.com/avatar${md5(user.email)}?d=identicon` }).then((user) =gt; { // Profile updated! console.log('Profile updated!', user); }).catch((error) =gt; { // An error occurred console.log(error); }); } }
Ответ №1:
Значение this.auth.currentUser
может быть равно null, если состояние аутентификации еще не загружено. В этом случае вы можете передать объект пользователя из самой учетной записи пользователя, как показано ниже:
createUserWithEmailAndPassword(this.auth, email, password) .then(async userCredential =gt; { console.log('userCredential', userCredential); await this.updateUserProfile(userCredential.user, name); // Pass user object from here ^^^ }) // Take user object as parameter async updateUserProfile(user: User, name: string) { updateProfile((user), { displayName: name, photoURL: `https://gravatar.com/avatar${md5(user.email)}?d=identicon` }) }