[英]bcrypt.compare from bcryptjs always returns false
我在 React 和 Node js 項目上使用 bcryptjs,但似乎無法讓它返回 true。 在所有在線驗證器上,它使用密碼和哈希返回為有效。 我已經驗證長度是正確的,但無法讓它工作。
我的 HandleSubmit 函數:
event.preventDefault();
const self = this;
const data = `username=${encodeURIComponent(this.state['username'])}&`;
axios.post(`/test/do_login/${data}`)
.then(function (response) {
console.log("RESPONSE");
console.log(response);
bcrypt.compare(self.state.password, response.data).then(function (result) {
console.log(`PW: ${self.state.password}\nDATA:${response.data}\nRES:${result}`);
if (result) self.setState({ loginSuccess: true });
});
});
}
在服務器上:
const express = require('express');
const bcrypt = require('bcryptjs');
const router = express.Router();
const regexp = /=(.+?)&/g
router.post('/do_login/:data', (req, res) => {
var con = req.app.get('con');
var args = [...(req.params.data).matchAll(regexp)];
console.log(args);
var username = args[0][1];
query = `SELECT * FROM users WHERE username="${username}";`
con.query(query, (err, result) => {
if (err) throw err;
console.log(result);
if (result.length < 1) res.send("USERNAME_INV")
else {
res.send(String(result[0].pw).slice(0,59));
};
});
});
module.exports = router;
我正在使用 slice 刪除數據庫條目末尾的 \\u000 。 它存儲在 BINARY(60) 中
我認為你試圖以錯誤的方式解決這個問題。
在您的 React 應用程序中,只需將帶有正文負載(用戶名和密碼)的請求發布到您的服務器。 而已。 不要將憑據作為查詢參數發送,這是不安全的。
在您的 nodejs 應用程序中,您必須處理此調用:
此外,請檢查您的用戶名字段以避免 sql 注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.