【发布时间】:2022-01-22 15:06:23
【问题描述】:
所以我尝试在使用 MySQL 数据库的登录应用程序中使用实现 argon2。在收到承诺处理错误时,我设法将用户名及其哈希密码存储在数据库中。但是我无法通过 Postman 传递参数来使用相同的用户名和密码登录,因为我得到了同样的错误。
到目前为止,这是我的代码:
server.js
const express = require("express");
const app = express();
const bodyParser = require("body-parser");
app.use(bodyParser.json({ type: "application/json" }));
app.use(bodyParser.urlencoded({ extended: true }));
app.set("port", 8080);
const argon2 = require("argon2");
const Pool = require("mysql2").createPool;
const config = {
host: "localhost",
user: "root",
password: "XXXXX",
database: "XXXXX"
};
const pool = new Pool(config);
app.post("/login", async (req, res) => {
console.log(req.body);
const username = req.body.username;
const password = req.body.password;
try {
const query = "SELECT password from adminlogin where username = ?";
const result = await pool.query(query, [username]);
if (result.rowCount == 1) {
console.log(result.rows[0].password);
if (await argon2.verify(result.rows[0].password, password)) {
res.json("Log In successful");
} else {
res.json("Password incorrect");
}
} else {
res.json("username not found");
}
} catch (err) {
console.log("ERROR " + err);
}
});
app.post("/create", async (req, res) => {
let hash;
const username = req.body.username;
const password = req.body.password;
try {
hash = await argon2.hash(password, "abcdefghijklmnop");
console.log("HASH " + hash);
const query = "INSERT INTO adminlogin (username, password) VALUES (?, ?)";
const result = await pool.query(query, [username, hash]);
//console.log(result);
if (result.rowCount == 1) {
res.json("User created");
} else {
res.json("User not created");
}
} catch (err) {
console.log("ERROR " + err);
if (err.message.search("duplicate") != -1) {
res.json("Username taken");
}
}
});
错误信息:
您尝试调用 .then()、.catch() 或对非 Promise 的查询结果调用 await,这是一个编程错误。尝试调用 con.promise().query() 或 require('mysql2/promise') 而不是 'mysql2' 以获得查询接口的 Promise 兼容版本。要了解如何使用 async/await 或 Promises,请查看 https://www.npmjs.com/package/mysql2#using-promise-wrapper 的文档或 https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md 的 mysql2 文档 ERROR 错误:您尝试调用 .then()、.catch() 或对非 Promise 的查询结果调用 await,这是一个编程错误。尝试调用 con.promise().query() 或 require('mysql2/promise') 而不是 'mysql2' 以获得查询接口的 Promise 兼容版本。要了解如何使用 async/await 或 Promises,请查看 https://www.npmjs.com/package/mysql2#using-promise-wrapper 的文档或 https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md 的 mysql2 文档
【问题讨论】:
标签: mysql node.js express debian vmware