这似乎是一个显而易见的问题,但我在 Firebase 数据库内创建用户时遇到问题。我对 firebase 和编码非常陌生。
我的理解是,当用户单击注册按钮时,将在“对象/用户”下创建具有新验证的 uid 的用户。但是该用户始终为空。在 google documentation 中说有时用户为空,因为它尚未完成初始化用户。并将其放入 onAuthStateChanged
中。但是,如果我这样做,每次用户都会被创建/覆盖登录或注销。
我想我正在寻找的是一些解决方案,当用户首次使用有效信息注册时,在我的 firebase 数据库中创建用户。
这是我的代码:
function LoginCtrl($scope) {
$scope.txtEmail = document.getElementById('txtEmail');
$scope.txtPassword = document.getElementById('txtPassword');
$scope.btnLogin = document.getElementById('btnLogin');
$scope.btnSignUp = document.getElementById('btnSignUp');
$scope.btnLogout = document.getElementById('btnLogout');
btnLogin.addEventListener('click', e => {
const email = txtEmail.value;
const pass = txtPassword.value;
const auth = firebase.auth();
const promise = auth.signInWithEmailAndPassword(email, pass);
promise.catch(e => console.log(e.message));
});
btnSignUp.addEventListener('click', e => {
const email = txtEmail.value;
const pass = txtPassword.value;
const auth = firebase.auth();
const promise = auth.createUserWithEmailAndPassword(email, pass);
promise.catch(e => console.log(e.message));
createUser();
});
function createUser() {
var user = firebase.auth().currentUser;
if (user != null) {
const dbRefObject = firebase.database().ref().child('object');
const dbRefList = dbRefObject.child("users/" + user.uid);
dbRefList.set({
name: "jim",
});
}
}
btnLogout.addEventListener('click', e => {
firebase.auth().signOut();
});
firebase.auth().onAuthStateChanged(firebaseUser => {
if (firebaseUser) {
console.log(firebaseUser);
btnLogout.classList.remove('hide');
btnLogin.classList.add('hide');
} else {
console.log('not logged in');
btnLogout.classList.add('hide');
btnLogin.classList.remove('hide');
}
})
}
最佳答案
罪魁祸首在于这三行:
const promise = auth.createUserWithEmailAndPassword(email, pass);
promise.catch(e => console.log(e.message));
createUser();
您过早地触发createUser()
。在上面的代码片段中,这种情况发生在启动(异步)注册过程之后 - SDK 从未有机会在身份验证数据库中实际创建用户!
createUserWithEmailAndPassword
返回一个 promise ,如您的本地变量所示。这里您需要做的是链接两个调用,即在履行 promise 后启动数据库操作。
试试这个:
// inside the click handler
btnSignUp.addEventListener('click', e => {
const email = txtEmail.value;
const pass = txtPassword.value;
const auth = firebase.auth();
auth.createUserWithEmailAndPassword(email, pass)
.then(user => createUser(user)) // <-- important!
.catch(e => console.log(e.message));
});
function createUser(user) {
// no need for currentUser if you pass it in as an argument
if (user) {
...
}
}
关于javascript - 当我首次创建用户进行身份验证时,如何将用户及其唯一 ID 添加到我的 Firebase 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455909/