所以,我已经看过一些关于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)
})
提前感谢您的帮助,如果我需要指明一些内容,请告诉我们! :)
答案 0 :(得分:0)
bcrypt
生成的哈希值为60个字符。尝试增加列的大小。
哈希信息
构成散列哈希的字符是./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 $。
结果哈希值为60个字符。