javascript - bcrypt.compare digunakan untuk mengesahkan kata laluan dalam Meteor Bagaimana untuk mengubah suai pembolehubah global dalam fungsi panggil balik?
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:45:27
0
1
875

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

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

membalas semua(1)
Peter_Zhu

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)

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan