Не удается переназначить значение ключа объекта - мой синтаксис неверен? - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь реализовать регистрационную форму, используя bcrypt и nodejs / express.

Как вы увидите ниже, я попытался установить User.password = hash;, но по какой-то причине при передаче объекта в postgresвводится пароль без пароля.

Приведенный ниже код показывает незначительные изменения. Я изменил оригинал

User.create({name, email, password})

на

User.create({name, email, password: hash})

Это сработало при передаче хэшированного пароля, но несмысл для меня ... Разве это не обязательно? Чего мне не хватает?

Любая помощь в понимании того, что происходит, будет чрезвычайно цениться. Спасибо!

                        bcrypt.hash(newUser.password, salt, (err, hash) => {
                            if(err) throw err;
                            // Set password to hashed
                            User.password = hash;
                            console.log(hash);
                            // Save user
                            User.create({
                                name,
                                email,
                                password: hash
                            })
                                .then(user => {
                                    res.redirect('/users/login')
                                })
                                .catch(err => console.log(err));
                    }))

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Синтаксис User.create({name, email, password}) - это просто сокращение для:

User.create({
    name: name,
    email: email,
    password: password
})

Поскольку ваш хэш пароля хранится в переменной hash вместо password, вы не можете использовать для него ярлык name и email не изменены.

Чтобы использовать ярлык, необходимо сохранить хэш в переменной с именем password:

bcrypt.hash(newUser.password, salt, (err, password) => {
                                           // ^^^ this will make it work
    if(err) throw err;
    // Set password to hashed
    User.password = password;
    console.log(password);
    // Save user
    User.create({
        name,
        email,
        password
    })
1 голос
/ 23 октября 2019

Потому что User - это (я считаю) модель Mongoose, похожая на класс в ECMAScript 6. Непосредственное присвоение свойств самому классу (это статические свойства ) не изменяет созданные элементы,Что вы делаете, это создаете новое свойство для переменной User.

Итак, все, что вам нужно сделать, чтобы использовать сокращенный синтаксис записи свойств, это сделать переменную password равной hash:

bcrypt.hash(newUser.password, salt, (err, hash) => {
  let password = hash;
  User.create(name, email, password)
    .then(user => res.redirect("/users/login"))
    .catch(err => console.log(err));
...