Как исправить проблему с хешированием в postgres

#javascript #node.js #postgresql

#javascript #node.js #postgresql

Вопрос:

У меня проблема с моим проектом. Я использую базу данных Postgres (9.6). В моем проекте я создаю объект пользователя приложения, а затем хэширую его пароль с помощью BCrypt. После этого вставьте его в базу данных. Но когда я пытаюсь войти в систему, хэш из базы данных и хэш, созданный на основе учетных данных, не совпадают, поэтому я не могу войти в систему. Когда я попытался подключиться к другому типу базы данных (MariaDB), это сработало отлично. Я не знаю, что я делаю не так, но это должна быть какая-то неправильная конфигурация в подключении к базе данных.

 //this is my connection configuration
db: {
        hostname: "localhost",
        dialect: "postgres",
        username: "user_turnaj",
        password: "heslo",
        database: "turnajovka",
        logging: false
    }
 

Вот как выглядит мой пользовательский объект

 const bcrypt = require("bcrypt");

const hashPassword = password => {
    return bcrypt.hashSync(password, bcrypt.genSaltSync());
};

module.exports = (sequelize, DataTypes) => {
    const model = sequelize.define("User", {
        username: {
            type: DataTypes.STRING,
            unique: true,
            allowNull: false
        },
        password: {
            type: DataTypes.CHAR,
            length: 60,
            allowNull: false
        }
    }, {
        hooks: {
            beforeCreate: user => {
                const hashed = hashPassword(user.password);
                console.log(hashed);
                user.password = hashed;
            }
        }
    });

    model.prototype.hashPassword = function (password) {
        return hashPassword(password);
    };

    model.prototype.validPassword = function (password) { //this is where the hashes are not the same
        return bcrypt.compareSync(password, this.password);
    };

    return model;
};
 

Вот как выглядит таблица с пользователями, она была автоматически сгенерирована моим пользователем модели.

 -- auto-generated definition
create table users
(
    id         serial                   not null
        constraint users_pkey
            primary key,
    username   varchar(255)             not null
        constraint users_username_key
            unique,
    name       varchar(255)             not null,
    password   char(255)                not null,
    email      varchar(255)             not null
        constraint users_email_key
            unique,
    gender     enum_users_gender,
    role       enum_users_role default 'USER'::enum_users_role,
    created_at timestamp with time zone not null,
    updated_at timestamp with time zone not null
);

alter table users
    owner to user_turnaj;
 

Комментарии:

1. Пожалуйста, покажите инструкции SQL, которые создают пользователя и сохраняют пароль. Я предполагаю, что вы не имеете в виду CREATE USER, потому что BCrypt не поддерживается как тип хэша для пользователей postgres.

2. Да, вы правы, я уточнил свой вопрос. Надеюсь, теперь я предоставил достаточно подробностей.