2017-01-09 85 views
4

我在Firebase中遇到了一个非常奇怪的问题,如果我使用与之前用户相同的密码创建新用户,正确的信息,但正在以先前的用户帐户登录并显示所有用户以前的信息。Vue + Firebase:正在创建用户但在其他用户帐户下登录的用户

我注销,然后我登录新的用户信息,然后才显示正确的信息。如果我使用相同的密码,我还有一个新用户覆盖Firebase中以前的用户路径问题,但似乎无法重新创建。

我的代码来创建一个新的用户如下

createNewUser() { 

    // Create a new user with email and password. 

    var email = this.newUserEmail; 
    var password = this.newUserPassword; 

    firebaseAuth.createUserWithEmailAndPassword(email, password).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // ... 
    }).then(() => { 

     firebaseAuth.onAuthStateChanged(user => { 
     database.ref('/users/' + user.uid).set({ 
      name: this.newUserName, 
      email: this.newUserEmail, 
      isRetailer: false, 
      isAdmin: false 
     }); 
     }); 
    }); 

    // Push to home 

    router.push({ path: '/' }); 

    } 
    } 
} 

然后将新创建的用户取到下面的代码在created() {}方法运行

// Checks for a user and dispatches an action changing isAuthed state to true. 
firebaseAuth.onAuthStateChanged(user => { 
    console.log(store.state.authentication); 
    console.log(user); 
    store.dispatch('checkUser', user); 
}) 

最后的主网页,这发出一个动作,其运行如下

checkUser (context, user) { 

    if (user.uid) { 

    context.commit('authUser', user); 

    // checkUser runs once when the app is initialized. 

    // Gets value of the user's isRetailer property from firebase. 

    firebase.database() 
     .ref('/users/' + user.uid + '/isRetailer/') 
     .once('value').then(snapshot => context.commit('isRetailer', { 
      value: snapshot.val() 
     })); 

     // Gets name of the current user from Firebase and will eventually store that in Vuex state. 

     firebase.database() 
      .ref('/users/' + user.uid + '/name/') 
      .once('value').then(snapshot => context.commit('getDisplayName', { 
       name: snapshot.val() 
      })); 
     } else { 
      console.log('No user currently logged in'); 
     } 
    }, 

所以基本上我在做以下工作

  1. 使用Firebase创建一个新用户。
  2. 将该用户保存到Firebase数据库。
  3. 根据我从Firebase获得的一些数据更新Vuex状态。

当我刚刚创建一个全新的密码的新用户,没有任何反应,我在控制台中得到以下内容。

enter image description here

然而,当我创建一个使用先前已创建密码的另一个新用户,它记录了我在,但最后的用户(即用新的密码创建的)的信息下。但是,使用新密码创建的用户不会存储在Firebase中。

这真的是一个bizzare问题,我真的不知道是什么原因造成的。 uid错误是我在控制台中遇到的唯一错误。创建用户时,我不能使用承诺吗?我之所以加入这个功能是因为用户并没有被添加到Firebase中,因为在帐户创建后我无法抓住用户。

真的可以使用另一组眼睛在这一个。

更新:当试图用我的信息登录时,似乎我的信息被firebase中的另一个用户信息覆盖。然后,我也会在应用程序中显示所有用户信息。然后每当我尝试用我的电子邮件/密码登录时,我从现在开始以约翰史蒂夫的身份登录。

enter image description here

谢谢!

回答

1

错误Cannot read property 'uid' of null是因为火力可以为当前用户返回null在初始化,请参阅manage-users guide

而第二个问题,我认为这是由于火力点已经完成,以节省用户之前你了变化路径的家(记该任务是异步的)

createNewUser() { 

    // Create a new user with email and password. 

    var email = this.newUserEmail; 
    var password = this.newUserPassword; 

    firebaseAuth.createUserWithEmailAndPassword(email, password).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // ... 
    }).then(() => { 

     firebaseAuth.onAuthStateChanged(user => { 
     database.ref('/users/' + user.uid).set({ 
      name: this.newUserName, 
      email: this.newUserEmail, 
      isRetailer: false, 
      isAdmin: false 
     }).then(()=>{ 
      // Push to home after user data has been saved 
      router.push({ path: '/' }); 
     }); 
     }); 
    }); 
    } 
    } 
} 
+0

好的。我已经在第一个回调中删除了'firebaseAuth.onAuthStateChanged(user => {})'并将其替换为'var user = firebaseAuth.currentUser;'。然后使用'router.push()'方法删除第二个回调,并将'router.push()'移到回调函数之外。这似乎是摆脱我的错误。我会在这里做更多的测试并看看。非常感谢!! – maxwellgover

+1

现在我认为这解决了我的问题。希望它有!谢谢你的领导:) – maxwellgover