我在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');
}
},
所以基本上我在做以下工作
- 使用Firebase创建一个新用户。
- 将该用户保存到Firebase数据库。
- 根据我从Firebase获得的一些数据更新Vuex状态。
当我刚刚创建一个全新的密码的新用户,没有任何反应,我在控制台中得到以下内容。
然而,当我创建一个使用先前已创建密码的另一个新用户,它记录了我在,但最后的用户(即用新的密码创建的)的信息下。但是,使用新密码创建的用户不会存储在Firebase中。
这真的是一个bizzare问题,我真的不知道是什么原因造成的。 uid错误是我在控制台中遇到的唯一错误。创建用户时,我不能使用承诺吗?我之所以加入这个功能是因为用户并没有被添加到Firebase中,因为在帐户创建后我无法抓住用户。
真的可以使用另一组眼睛在这一个。
更新:当试图用我的信息登录时,似乎我的信息被firebase中的另一个用户信息覆盖。然后,我也会在应用程序中显示所有用户信息。然后每当我尝试用我的电子邮件/密码登录时,我从现在开始以约翰史蒂夫的身份登录。
谢谢!
好的。我已经在第一个回调中删除了'firebaseAuth.onAuthStateChanged(user => {})'并将其替换为'var user = firebaseAuth.currentUser;'。然后使用'router.push()'方法删除第二个回调,并将'router.push()'移到回调函数之外。这似乎是摆脱我的错误。我会在这里做更多的测试并看看。非常感谢!! – maxwellgover
现在我认为这解决了我的问题。希望它有!谢谢你的领导:) – maxwellgover