javascript - bcrypt.compare est utilisé pour vérifier les mots de passe dans Meteor Comment modifier les variables globales dans la fonction de rappel ?
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:45:27
0
1
851

Comme le titre, en train de réinventer la roue vous-même, comment utiliser bcrypt.compare 做密码验证,想在回调函数中来修改全局变量 info côté serveur ?
Le code que j'ai écrit est le suivant :

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

Essayé info 改成 window.info (ps:网上找到解决方案,我也不知道为什么要这样做), 但直接报错,之前在写 react 组件时也遇到类似的情况,通过给 callback 绑定 this 解决的,但在这里给(err, res) => {}.bind(this)后,依旧是 undefined

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

répondre à tous(1)
Peter_Zhu

bcrypt.compare est une méthode asynchrone. Lorsque vous console.log, aucune valeur n'a été attribuée à info. Dans ce cas, vous devez changer votre méthode en méthode asynchrone, laisser userLogin renvoyer Promise, puis résoudre (une fois bcrypt terminé. .infos)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal