Wie im Titel: Wie verwende ichbcrypt.compare
做密码验证,想在回调函数中来修改全局变量info
auf der Serverseite, während ich das Rad selbst neu erfinde?
Der Code, den ich geschrieben habe, lautet wie folgt:
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
Versuchtinfo
改成window.info
(ps:网上找到解决方案,我也不知道为什么要这样做), 但直接报错,之前在写 react 组件时也遇到类似的情况,通过给callback
绑定this
解决的,但在这里给(err, res) => {}.bind(this)
后,依旧是undefined
bcrypt.compare 是一个异步方法,你console.log的时候,info还没有被赋值,这种情况下你应该把你的方法也改成异步方法,让userLogin返回Promise,然后在bcrypt完成以后resolve(info)