0

현재 React Native 앱용 Firebase을 설정 중입니다. 인증 & 기본 쓰기/읽기 작업이 정상입니다. "signUp"과 "writeUserData"기능이 동시에 실행되기 때문에 초기 인증 직후 데이터베이스에 데이터를 쓰는 데 어려움이 있습니다 (아직까지는 이 없습니다).React + Firebase. 인증 후 데이터베이스에 쓰기

... 

module.exports = React.createClass({ 
    getInitialState(){ 
    return({ 
     email: '', 
     password: '', 
     confirmPassword: '', 
     result: '', 
    }) 
    }, 

    signUp() { 
    if (this.state.password === this.state.confirmPassword) { 
     let {email, password} = this.state; 
     firebaseApp.auth().createUserWithEmailAndPassword(email, password) 
     .catch(error => this.setState({result: error.message 
     })); 
     this.writeUserData(email); 
    } else { 
     this.setState({result: 'Passwords do not match.'}) 
    } 
    }, 

    writeUserData(email) { 
    let userId = firebaseApp.auth().currentUser.uid; 
    firebase.database().ref('users/' + userId + '/').set({ 
     info: { 
      firstName: 'Jonas', 
      email: email, 
     }, 
     currentState: { 
      currentDay: 0, 
      currentSeries: 0, 
     } 
    }); 
    }, 
    render() { 
... 

내가 이것에 대해 좋은 문서를 찾을 수 없습니다 :

여기 내 코드입니다. 누군가 포인터를 줄 수 있습니까? 감사합니다.

답변

0

스택 오버플로에서 솔루션을 찾았습니다. 예상보다 훨씬 쉽습니다. How do you include a username when storing email and password using Firebase (BaaS) in an Android app?

수정 : 지금은 onAuthStateChanged 방법을 사용하고 있습니다.

componentDidMount() { 
    firebaseApp.auth().onAuthStateChanged(user => { 
     if(user) { 
     this.writeUserData(user.uid, user.email, this.state.firstName); 
     } 
    }) 
    }, 

    writeUserData(userId, email, firstName) { 
    firebase.database().ref('users/' + userId + '/').set({ 
     info: { 
      firstName: firstName, 
      email: email, 
     }, 
     currentState: { 
      currentDay: 0, 
      currentSeries: 0, 
     } 
    }); 
    }, 
1

createUserWithEmailAndPassword() 방법은 약속 반환, 당신은 다음과 같이, 사용자 정보를 업데이트하는 것이 .then의 사용해야합니다 :

firebaseApp.auth() 
    .createUserWithEmailAndPassword(email, password) 
    .then(user => { 
    user.updateProfile({ 
     displayName: 'Jonas' 
    }); 
    user.updateEmail(email); 
    }) 
    .catch(error => this.setState({result: error.message})); 

참고 또한 appropriate way 이메일을 '

+0

감사 사용자를 업데이트 할 수 있습니다. 그래, 난 동의. 나는 최신 버전의 코드에서'.then' 메소드를 사용한다. 'onAuthStateChanged'보다 더 적절하고 신뢰할만한 것 같습니다. – Jonas

관련 문제