Javascript和Firebase - 使用电子邮件和密码以及onAuthStateChange创建用户

时间:2018-03-02 02:50:44

标签: javascript firebase firebase-authentication

您好我在找到一种方法让auth状态更改自动指向登录用户的页面时遇到问题。在创建用户之前,我想将用户配置文件推送到我的数据库。

所以我创建了用户,然后用这段代码添加到数据库

firebase.auth().createUserWithEmailAndPassword(email, password).then(function (user){
  firebase.database().ref('/Profiles').child(user.uid).set({
    address: ''
  })
}).catch(function(error){
  let errorCode = error.code;
  let errorMessage = error.message;
  navigator.notification.alert('Error: Code: ' + errorCode + ', ' + errorMessage,false,'Error','Done');
});

但是,一旦createUserWithEmailAndPassword成功,这个onAuthStateChanged函数就会在数据库' Profile'之前导航到新页面。记录已添加。

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    let u = firebase.auth().currentUser;
    window.location = 'loggedIn.html';

  }
});

我怎样才能使我的onAuthStateChanged函数在导航离开页面之前等待添加数据库记录

注意::我想保留onAuthStateChanged,这样如果用户登录会话,他们将自动定向到loggedIn页面

2 个答案:

答案 0 :(得分:0)

保存到数据库后,您可以尝试注册onAuthStateChagned处理程序。

答案 1 :(得分:0)

我有同样的问题。我尝试了几种方法,但是由于某种原因一个简单的setState解决了这个问题。

尝试为createUserWithEmailAndPassword函数内的内容设置状态。例如:

firebase.auth().createUserWithEmailAndPassword(email, password).then(function (user){
  firebase.database().ref('/Profiles').child(user.uid).set({
    address: ''
  })
  // SET Some state
  this.setState({ error: null, isLoading: false });

  // Besides that I show the feedback as an alert (just in case you think it's a good idea)
  Alert.alert(
      `Welcome ${user.user.name}!`,
      'Your account has been successfully created.',
      [
        {
          text: 'OK',
          onPress: () =>
            navigation.navigate('Main'),
        },
      ]
    );

}).catch(function(error){
  let errorCode = error.code;
  let errorMessage = error.message;
  navigator.notification.alert('Error: Code: ' + errorCode + ', ' + errorMessage,false,'Error','Done');
});