cari

Rumah  >  Soal Jawab  >  teks badan

javascript - bcrypt.compare digunakan untuk mengesahkan kata laluan dalam Meteor Bagaimana untuk mengubah suai pembolehubah global dalam fungsi panggil balik?

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梦2782 hari yang lalu881

membalas semua(1)saya akan balas

  • 天蓬老师

    天蓬老师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)

    balas
    0
  • Batalbalas