Вопросы

Сохранение хешированного пароля в Sequelize противоречит моему простому желанию сохранить хешированный пароль

Это мой первый день использования Sequelize с postgreql, так что простите за мои наивные вопросы. У меня есть простая модель, чтобы опробовать ее:

var User = sequelize.define("user", {
username: Sequelize.STRING,
password: Sequelize.STRING

})

Я использую expressjs / node и паспорт JS, чтобы пользователь мог зарегистрироваться / зарегистрироваться:

passport.use('local-register', new LocalStrategy({
   passReqToCallback: true
}, function (req, username, password, done) {

User.findOne({ where: { username: username } }).then(function (user) {
    if (user) {   
        return done(null, false, { message: "enter  email that belongs to you please..." }, 
       console.log('That email is already taken'));
    } else {
       
         //use bcrypt to salt and hash the password
         let saltRounds = 2;
         let hashedpass = bcrypt.hash(password, saltRounds);           

        var data = {
            username: username,
            password: hashedpass  //password
        };
        User.create(data).then(function (newUser, created) {
            if (!newUser) {
                return done(null, false);
            }
            if (newUser) {
                return done(null, newUser);
            }
        });
    }
}).catch(err => { console.log("catch error :", err) });
}));

Теперь, когда я пытаюсь зарегистрироваться как пользователь, я получаю сообщение об ошибке:

UnhandledPromiseRejectionWarning: SequelizeValidationError: string violation: password cannot be an array or an object
at InstanceValidator._validate (D:\mycode\postegresql\postee1\node_modules\sequelize\lib\instance-validator.js:78:13)
at processTicksAndRejections (internal/process/next_tick.js:81:5)

Я понимаю, что это проверка sequelize для пароля STRING, но я не добавлял никакой проверки и какой тип данных sequelize принимает хешированный пароль?

Читать:
aws-secretsmanager-caching-python :: Используется ли кеш для разных контейнеров докеров, работающих на одном экземпляре EC2?

Я понимаю, как добавлять крючки в мою модель, и он правильно хеширует пароль перед сохранением в базу данных:

   hooks: {
        beforeCreate: (user) => {
            const salt = bcrypt.genSaltSync(2);
            user.password = bcrypt.hashSync(user.password, salt);
        }
    },
    instanceMethods: {
        validPassword: function (password) {
            return bcrypt.compareSync(password, this.password);
        }
    }

Но я хочу хешировать пароль в коде моего сервера, как я пытался сделать выше. Как исправить ошибку проверки, указанную выше? Я просто хочу использовать Bycrpt в своем паспорте. Тип данных неправильный? Как исправить эту ошибку, не трогая мою модель? Это не должно быть проблемой, потому что я уже хешировал пароль, мне просто нужно его сохранить, но похоже, что Sequelize заставляет это делать определенным образом, поэтому для всех продолжений NINJAS, как мне это исправить?

это Sequelize dataType? этого нет в их документах. sequelize.org/v5/manual/data-types.html   —  person Marco    schedule 13.02.2021

Мое плохое, см. Ответ ниже   —  person Marco    schedule 13.02.2021

Похожие записи

преобразовать логическое значение в строку для значений карты в nifi jolt

admin

Как я могу использовать SQLite для функционального тестирования PHPUnit в TYPO3 9LTS

admin

кеширование модулей go в сборке кода без пользовательского образа докера

admin

Как добавить тестовые примеры в Microsoft Test Manager через программу

admin

Вызов защищенного веб-API Azure AD из Angular Frontend

admin

Неопубликованные статические данные

admin