javascript - bcrypt.compare wird zum Überprüfen von Passwörtern in Meteor verwendet. Wie ändere ich globale Variablen in der Rückruffunktion?
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:45:27
0
1
771

Wie im Titel: Wie verwende ichbcrypt.compare做密码验证,想在回调函数中来修改全局变量infoauf 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

过去多啦不再A梦
过去多啦不再A梦

Antworte allen (1)
Peter_Zhu

bcrypt.compare 是一个异步方法,你console.log的时候,info还没有被赋值,这种情况下你应该把你的方法也改成异步方法,让userLogin返回Promise,然后在bcrypt完成以后resolve(info)

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!