Я пытаюсь создать user в firebase для моего website, используя javascript и HTML следующим образом:
Мой код HTML:
<head>
<script src = "https://www.gstatic.com/firebasejs/4.13.0/firebase.js"></script>
<script>
// Initialize Firebase
var config =
{
apiKey: "myKey",
authDomain: "myDomain",
databaseURL: "myDatabaseUrl",
projectId: "myProjectId",
storageBucket: "myStorageBucket",
messagingSenderId: "myMessagingSenderId"
};
firebase.initializeApp(config);
</script>
<script src = "signUpScript.js"></script>
</head>
<body>
<input type = "button" value = "SignUp" onclick = "signUpButton_TouchUpInside()">
</body>
А это мой javascript:
function signUpButton_TouchUpInside()
{
var userEmail = document.getElementById("emailTextFieldSignUp").value;
var userPassword = document.getElementById("passwordTextFieldSignUp").value;
var userName = document.getElementById("nameTextFieldSignUp").value;
window.alert("test1"); // does get called
firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword).catch(function(error)
{
window.alert("test2"); // doesnt get called
if (error)
{
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
window.alert("There went something wrong : " + errorMessage);
// ...
}
else
{
window.alert("test3"); // doesnt get called
setUserInfo("", "", userName, userEmail, "1"); // How do I get the uid of the user which was just created?
}
});
}
function setUserInfo(profileImageUrl, profileBannerUrl, username, email, uid)
{
var userId = firebase.auth().currentUser.uid;
var ref = firebase.database().ref();
var userRef = ref.child("users").child(userId);
userRef.set({
username: username,
username_lowercase: username.toLowerCase().replace(" ", ""),
email: email,
profileImageUrl: profileImageUrl,
profileBannerUrl: profileBannerUrl
}, function(error)
{
if (error)
{
var errorMessage = error.message;
window.alert("There went something wrong : " + errorMessage);
}
else
{
window.alert("Account successfully created");
}
});
}
Почему-то он даже не вызывает функцию createUserWithEmailAndPassword.
Итак, у меня есть два вопроса:
Почему не вызывается функция?
Если бы он был вызван, как бы мне получить доступ к uid только что созданного пользователя?
Честно говоря, я даже не знаю, что это такое. Я новенький, извини
Ни один из совместно используемых вами кодов не вызывает signUpButton_TouchUpInside, так что это объясняет, если createUserWithEmailAndPassword не вызывается. Вы где-то подключили это в HTML? Если да, поделитесь минимальным HTML и для этого. В общем, посмотрите как создать минимальный полный проверяемый пример. Таким образом, это лучший способ повысить шансы на то, что кто-то здесь может помочь.
Хорошо, я отредактировал свой вопрос. Я добавил свой HTML-код



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш текущий код обнаруживает ошибки только от createUserWithEmailAndPassword. Причина, по которой в большинстве примеров используется только catch, заключается в том, что обычно лучше всего обрабатывать поток «успешное создание учетной записи» в обработчике onAuthStateChanged.
Наименьшее изменение от вашего текущего кода - добавление then():
firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword)
.then(function(user) {
var user = firebase.auth().currentUser;
setUserInfo("", "", userName, userEmail, user.uid)
})
.catch(function(error) {
// no `if (error)` is needed here: if `catch` is called, there was an error
var errorCode = error.code;
var errorMessage = error.message;
window.alert("There went something wrong : " + errorMessage);
});
Однако, как было сказано, лучшим изменением является используйте onAuthStateChanged, который затем автоматически также гарантирует, что ваша информация о пользователе обновляется всякий раз, когда пользователь перезагружает приложение:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in, call setUserInfo here
} else {
// No user is signed in.
}
});
Хорошо, спасибо - вы действительно помогли мне с этим. Но теперь он, к счастью, добавляет пользователя в Authentication, но, к сожалению, не в базу данных. Я тоже что-то не так сделал?
Я перефразировал свой вопрос
Это похоже на новую проблему. Пожалуйста, не меняйте свой вопрос после того, как было дано решение для текущего вопроса, но откройте новый вопрос для новой проблемы. Это позволяет другим тоже помогать. Также: не забудьте проголосовать за и / или принять мой ответ.
У вас есть трассировка стека?