#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. Да, вы правы, я уточнил свой вопрос. Надеюсь, теперь я предоставил достаточно подробностей.