这是我获得哈希密码的注册表单:
getAllUsers().then((res) => {
let user = res.data.find(
(u) => u.ugovor === ugovor
);
if (user) {
setUser(user) {
bcrypt.genSalt(10, (err, salt)=> {
bcrypt.hash(user.password, salt, (err, hash) => {
postUser(user.id, hash, password, email).then((res) => {
user = res.data;
setPassword(prev => [...prev, hash]);
//loggedIn.password = hash;
setEmail(prev => [...prev, user]);
history("/login");
setError("");
console.log("uspesna registracija");
})
})
})
} else {
setError("Не постоји купац са унесеним бројем Уговора и мерила");
return 0;
}
});
}}>
这里是登录形式,一切都有效,但比较哈希密码,如果我比较输入的和哈希密码,直接比较也是错误的:
getAllUsers().then((res) => {
let user = res.data.find(
(u) => u.ugovor === ugovor
);
const doesPasswordMatch = bcrypt.compareSync(password, user.password);
if(!doesPasswordMatch) {
console.log('compare not success');
return 0;
} else {
console.log('compare success')
}
if (user) {
setLogIn(true);
setUser(user);
history("/profile");
console.log("uspesno ulogovan");
} else {
setError("Broj Ugovora i lozinka se ne podudaraju");
}
});
}}
我试着用wait进行比较,compareSync,甚至这个,但都不起作用,它无法识别散列密码:
bcrypt.compare(password, user.password, function(err, result) {
// result == true
});
登录时请尝试此操作。求你了,记得喂饱肚子。
getAllUsers().then((res) => {
// look for user
let user = res.data.find((u) => u.ugovor === ugovor);
if (user) {
// user is found
const hashedPassword = u.password; // get stored hashed password
// compare passwords
const doesPasswordMatch = bcrypt.compareSync(password, hashedPassword, (err, result) => {
if (err) console.log(err);
// result == true
});
if (doesPasswordMatch) {
// correct password
console.log("compare success");
setLogIn(true);
setUser(user);
history("/profile");
console.log("uspesno ulogovan");
} else {
// wrong password
console.log("compare not success");
return 0;
}
} else {
// user is not found
setError("Broj Ugovora i lozinka se ne podudaraju");
}
});