使用 bcrypt 进行密码散列
Password hashing with bcrypt
伙计们,我正在尝试使用 BCRYPT 生成密码哈希,但用户真实密码已发送到 PostgresSQL
我该怎么做才能解决它?我写错了吗?
import { Model, Sequelize } from 'sequelize';
const bcrypt = require('bcrypt');
class User extends Model {
static init(sequelize) {
super.init(
{
name: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.VIRTUAL,
password_hash: Sequelize.STRING,
provider: Sequelize.BOOLEAN,
},
{
sequelize,
}
);
this.addHook('beforeSave', async (user) => {
if (user.password) {
user.password_hash = await bcrypt.hash(user.password, 8);
}
return this;
});
}
}
export default User;
根据您的评论,
我认为您不了解 bcrypt 的工作原理。
要注册一个用户你做
await bcrypt.hash(user.password, 8)
这将为您生成用户密码的散列版本。
现在将其保存在数据库中(随意命名,password/hashed_password)
您只需要数据库中的散列版本。 bcrypt 知道如何验证原始字符串是否等于哈希字符串。
因此,当您执行登录代码时,您需要调用
await bcrypt.compare(req.body.password, db.password, (err, same) => {
if(err) res.sendStatus(500)
if(same){
res.send("LOGIN SUCCSESSFULL!")
}else{
res.send("WRONG USERNAME/PASSWORD!")
}
})
我只是在脑海中写下这篇文章,但它应该有效。
伙计们,我正在尝试使用 BCRYPT 生成密码哈希,但用户真实密码已发送到 PostgresSQL 我该怎么做才能解决它?我写错了吗?
import { Model, Sequelize } from 'sequelize';
const bcrypt = require('bcrypt');
class User extends Model {
static init(sequelize) {
super.init(
{
name: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.VIRTUAL,
password_hash: Sequelize.STRING,
provider: Sequelize.BOOLEAN,
},
{
sequelize,
}
);
this.addHook('beforeSave', async (user) => {
if (user.password) {
user.password_hash = await bcrypt.hash(user.password, 8);
}
return this;
});
}
}
export default User;
根据您的评论,
我认为您不了解 bcrypt 的工作原理。
要注册一个用户你做
await bcrypt.hash(user.password, 8)
这将为您生成用户密码的散列版本。
现在将其保存在数据库中(随意命名,password/hashed_password)
您只需要数据库中的散列版本。 bcrypt 知道如何验证原始字符串是否等于哈希字符串。
因此,当您执行登录代码时,您需要调用
await bcrypt.compare(req.body.password, db.password, (err, same) => {
if(err) res.sendStatus(500)
if(same){
res.send("LOGIN SUCCSESSFULL!")
}else{
res.send("WRONG USERNAME/PASSWORD!")
}
})
我只是在脑海中写下这篇文章,但它应该有效。