Rumah > Soal Jawab > teks badan
Seperti tajuk, dalam proses mencipta semula roda sendiri, bagaimana untuk menggunakan bcrypt.compare
做密码验证,想在回调函数中来修改全局变量 info
di bahagian pelayan?
Kod yang saya tulis adalah seperti berikut:
Meteor.methods({
userLogin: (username, password) => {
let user = Users.find({username: username}).fetch()[0];
let info;
bcrypt.compare(password, user.password, (err, res) => {
if (err) {
info = {
status: 0,
data: err
}
}
// res == true 输入的密码与保存的密码一致
if (res) {
info = {
status: 1,
data: [{
_id: user._id,
username: user.username,
group: user.group
}]
};
} else {
info = {
status: 0,
data: "username or password invalid"
};
}
});
console.log(info);
return info;
}
});
console.log(info);
打印的内容为 undefined
Mencuba info
改成 window.info
(ps:网上找到解决方案,我也不知道为什么要这样做), 但直接报错,之前在写 react 组件时也遇到类似的情况,通过给 callback
绑定 this
解决的,但在这里给(err, res) => {}.bind(this)
后,依旧是 undefined
天蓬老师2017-05-16 13:47:27
bcrypt.compare ialah kaedah asynchronous Apabila anda console.log, info belum diberikan nilai Dalam kes ini, anda harus menukar kaedah anda kepada kaedah tak segerak, biarkan userLogin mengembalikan Promise, dan kemudian selesaikan (selepas bcrypt selesai. . info)