Node JS bcrypt compare返回false

时间:2016-12-22 13:20:02

标签: node.js passport.js bcrypt

所以,我已经看过一些关于bcrypt的帖子比较返回false,但似乎没有一个解决方案对我来说。

快速解释什么是:

使用护照办理登录手续。 存储在MySQL DB中的凭证,使用' mysql'封装

这两个似乎都可以正常使用纯文本密码。

散列和保存到数据库的代码:

    var newPlayer = (email,username,password,callback) =>{
        if(email && username &&password){
            bcrypt.hash(password, 16, function(err,hash){
                var sqlstr = sql.format("INSERT INTO players (email,username,password) VALUES (?,?,?);",[email,username, hash])
                console.log(sqlstr);
                connection.query(sqlstr,function(err, rows) {
                    if(err)console.log("[MYSQL] Error:",err);
                    if(callback)callback(err);
                })

            })

        } else {
            throw Error("[MYSQL]  New Player requires email, username and password");
        }

    }

和比较代码(来自护照配置的代码段):

        DAO.getPlayer(email,function(player){
            if(player)
            bcrypt.compare(password,player.password,(err,match)=>{
                if(err){
                    console.log("[PASSPORT] BCRYPT ERR:",err)
                    done(null,false)
                }
                else if(match)
                return done(null,player)
                else
                return done(null, false)
            })
            else
            return done(null, false)
        })

提前感谢您的帮助,如果我需要指明一些内容,请告诉我们! :)

1 个答案:

答案 0 :(得分:0)

bcrypt生成的哈希值为60个字符。尝试增加列的大小。

  

哈希信息

     

构成散列哈希的字符是./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 $。

     

结果哈希值为60个字符。

https://github.com/kelektiv/node.bcrypt.js#hash-info