[英]Verify hashed password in NodeJS
從幾周開始,我開始學習NodeJS。 我正在構建我的第一個應用程序,用戶可以在其中注冊帳戶並使用其憑據登錄。 當用戶注冊帳戶時,密碼將被散列。 我正在使用NPM的密碼哈希。 密碼的哈希工作正常。 問題是用戶登錄時驗證密碼。這是我的代碼:
注冊:
router.post('/register', function(req, res, next) {
req.getConnection(function (err, connection) {
var data = {
username: req.body.username,
password: passwordHash.generate(req.body.password),
mail: req.body.mail,
hometown: req.body.hometown
};
connection.query("INSERT INTO users set ? ", [data], function(err, results) {
res.redirect('/secret/login');
});
});
});
登錄並驗證哈希密碼:
router.post('/login', function(req, res, next) {
var user_login = req.body.username;
var password_login = req.body.password;
req.getConnection(function(err, connection) {
if (err) throw err;
connection.query('SELECT * FROM users WHERE username = ?', [user_login], function(err, results) {
if(results[0] && passwordHash.verify(password_login, results[0].password)) {
req.session.regenerate(function(){
req.session.login = true;
req.session.username = user_login;
req.session.data = results[0];
res.redirect(req.baseUrl);
});
} else {
console.log(results[0]); // true
res.redirect(req.baseUrl);
}
});
});
});
我也嘗試過
console.log(passwordHash.verify(password_login, results[0].password));
當我使用其中一個注冊帳戶的用戶名和密碼登錄時,console.log中的布爾響應每次都為“ false”。 我在互聯網上找不到答案,所以這就是為什么我在這里問。 我希望有人可以幫助我解決這個問題!
我正在使用以下模塊:
"ejs": "^2.3.4",
"express": "^4.13.3",
"express-myconnection": "^1.0.4",
"multer": "^1.1.0",
"mysql": "^2.9.0",
"password-hash": "^1.2.2"
驗證哈希密碼時,我在做什么錯?
我發現了問題..密碼以varchar(50)的形式保存在數據庫中。.必須是varchar(88)。 感謝您的閱讀和回答!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.