哈希不会匹配

时间:2014-04-02 23:05:36

标签: mysql node.js passport.js

我从该回购https://github.com/DanialK/PassportJS-Authentication中获取了一些代码片段,并对其进行了调整,而不是使用MongoDB,而是使用MySQL。这是我检查密码的代码:

User.checkPassword = function(username, password, done) {
        pool.getConnection(function(err,connection){
                connection.query("SELECT * FROM " + userTable + " WHERE username=? LIMIT 1;",[username], function(err, user){
                        // if(err) throw err;
                        if(err) return done(err);
                        if(!user[0]){
                                console.log("Incorrect User")
                                return done(null, false, { message : 'Incorrect Username.' });
                        }
                        user = user[0];
                        hash(password, user.salt, function(err, hash){
                                hash = hash.toString("hex");
                                if(err) return done(err);
                                if(hash == user.hash){
                                        console.log("SUCCESS!");
                                        return done(null, user);
                                }
                                done(null, false, {
                                        message : 'Incorrect password'
                                });
                        });
                });
        });
};

用于存储散列的MySQL字段是varchar(128),在将散列添加到表之前,我使用缓冲区中的toString(' hex')来存储它。哈希是使用https://github.com/visionmedia/node-pwd创建的。我的代码看起来很像教程的代码,但对于MySQL。但是当我尝试比较密码时,哈希值并不相同。为什么会这样?
这是我用来注册用户的代码:

User.cadastrar = function(username,password,done){
    var User = this;
    hash(password, function(err, salt, hash){
        hash = hash.toString('hex');
        if(err) throw err;
        // if (err) return done(err);
        pool.getConnection(function(err,connection){
            connection.query("INSERT INTO " + userTable + " (username,salt,hash) VALUES (?,?,?);", [username,salt,hash], function(err, user){
                if(err) throw err;
                // if (err) return done(err);
                connection.query("SELECT * FROM " + userTable + " WHERE username=? LIMIT 1;",[username], function(err,user){
                    done(null, user[0]);
                });
            });
            connection.release();
        });
    });
}

0 个答案:

没有答案