Входное значение не сохраняется, когда нажатие на массив дает неопределенное значение - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь обновить данные учетной записи пользователя в firebase, но я заметил, что значение ввода для одного из моих полей продолжает отображаться как неопределенное, даже когда я его console.log.Я работаю с двумя файлами, один из которых - файл loginjs, в котором я определяю пользовательский ввод.

signUpForm.addEventListener('click', function (e) {
e.preventDefault();

isSigningUp = true;

var email = signUpEmailInput.value;
var password = signUpPasswordInput.value;
var displayNameUser = displayNameInput.value;
var userPrivateKey = signUpPrivateKey.value;

var user = firebase.auth().currentUser;
var photoURL = "https://www.gravatar.com/avatar/" + md5(email);

if (signUpPasswordInput.value !== signUpPasswordConfirmInput.value) {
    setSignUpError('Passwords do not match!');

} else if (!displayNameUser) {
    setSignUpError("Display Name is required!");

} else if (!userPrivateKey) {
    setSignUpError('You need to set a Private Key!');
} else {
    auth.createUserWithEmailAndPassword(email, password)
        .then(function (user) {
            user.updateProfile({
                displayName: displayNameUser,
                photoURL: photoURL,
                privateKey: userPrivateKey

            }).then(function () {
                // Update successful.
                window.location.href = 'chat.html';
            }).catch(function (error) {
                // An error happened.
                window.alert("Some unexpected error happened!");
            });

            user.sendEmailVerification().then(function () {
                // Email sent.
            }).catch(function (error) {
                // An error happened.
                window.alert("Email was not able to send!");
            });
        })
        .catch(function (error) {
            // Display error messages
            setSignUpError(error.message);
        });
}});

Странно то, что пользовательский ввод для моего отображаемого имени и photoURL работает нормально, но когдаприходит на мой пользовательский ввод с закрытым ключом, регистрирует ввод при переходе на страницу чата, и я делаю console.log (user.privatekey). Он говорит, что он не определен.

В моем файле chatjs, когда яЯ выдвигаю всю информацию профиля пользователя.Файл chatjs в основном позволяет пользователю отправлять сообщение, сообщение и всю информацию профиля пользователя, сохраненную в базе данных firebase.

            messages.push({
            displayName: displayName,
            userId: userId,
            pic: userPic,
            text: myString.toString(),
            privatekey: user.privatekey,
            timestamp: new Date().getTime() // unix timestamp in milliseconds

        })
        .then(function () {
            messageStuff.value = "";

        })
        .catch(function (error) {
            windows.alert("Your message was not sent!");
            messageStuff;
        });

Дело в том, что приватный ключ вообще не сохраняется,чего я не понимаю, так как он регистрирует пользовательский ввод в файле loginjs, но когда я захожу в файл chatjs, он продолжает говорить, что значение undefiend.Я везде гуглил и до сих пор не нашел решения.Любая помощь будет очень ценной!

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Это потому, что объект Firebase user, который вы получаете от Firebase, не настраивается.Когда вы вызываете метод createUserWithEmailAndPassword(email, password), он возвращает вам специально определенный пользовательский объект - проверьте документы для свойств этого объекта .

Свойства displayName и photoURL оба работают, потому что они уже свойства возвращаемого пользователем.privateKey не является существующим свойством пользовательского объекта Firebase, и Firebase не знает, как обрабатывать вызов обновления для свойства, которое не определено.Проверьте этот вопрос и ответ , где Фрэнк объясняет, что Пользователи в Firebase не настраиваются - вам нужно хранить любую дополнительную информацию отдельно.

0 голосов
/ 26 июня 2018

Вам трудно увидеть опечатку.Измените:

privatekey: user.privatekey,

на:

privatekey: user.privateKey,

или:

privateKey:user.privateKey,

Поскольку javascript чувствителен к регистру, вам необходимо сопоставить регистр буквы K в имени переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...