节点 JS bcrypt 比较 returns false

Node JS bcrypt compare returns false

所以,我看过一些关于 bcrypt compare 返回 false 的帖子,但 none 似乎是我的解决方案。

什么是什么的快速解释:

使用护照登录。 凭据存储在 MySQL 数据库中,使用 '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)
        })

在此先感谢您的帮助,如果我需要指定某些内容,请告诉我! :)

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

Hash Info

The characters that comprise the resultant hash are ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$.

Resultant hashes will be 60 characters long.

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