【发布时间】:2019-12-31 22:09:34
【问题描述】:
我正在使用 Node.js 和 MySql 开发一个 API。
我使用bcrypt 对密码进行哈希处理,并使用VARBINARY 数据类型将其存储到MySql 数据库中。
当我通过命令行查询密码哈希时,我收到了我想要的输出。 但是,当我通过我的 API 查询时,我得到了不同的格式。 我认为是十进制格式。
如何再次获取字符串格式的哈希?
通过 api 获得结果
[
{
"pwd": {
"type": "Buffer",
"data": [
36,
50,
98,
36,
49,
48,
36,
71,
46,
107,
74,
75,
55,
110,
54,
49,
70,
77,
120,
112,
121,
52,
103,
73,
78,
83,
81,
79,
101,
98,
57,
105,
89,
48,
105,
86,
113,
86,
81,
113,
114,
104,
69,
84,
78,
103,
117,
105,
65,
53,
102,
83,
115,
115,
54,
53,
100,
57,
112,
121
]
}
}
]
代码:
app.post("/login", (req, res) => {
db.query(
`select pwd from users where username='${req.body.username}';`,
(err, results, fields) => {
if (err) throw err;
console.log(results);
return res.json(results);
}
);
});
【问题讨论】:
-
警告:请务必使用带有占位符值的准备好的语句来提供查询和数据之间的清晰分离,这样您就可以避免SQL injection bugs。这由 Sequelize 支持。在这里你应该有
username=?。此外,;仅用于交互模式,应在此类查询中省略。 -
您可能需要将 pwd 转换为 varchar,例如
SELECT CAST(pwd AS VARCHAR) AS password ...
标签: mysql node.js express hash