Tengo un problema en el que, cuando envío el botón de inicio de sesión, la sección de filas de datos devuelta está vacía:
[nodemon] reiniciando debido a cambios... [nodemon] iniciando node server.js ejemplo escuchando en el puerto 8080 Conectado a la base de datos
{ username: 'torontofam', password: 'password' } result{ command: 'SELECT', rowCount: 0, oid: null, rows: [], fields: [ Field { name: 'id', tableID: 19247, columnID: 1, dataTypeID: 23, dataTypeSize: 4, dataTypeModifier: -1, format: 'text' }, Field { name: 'username', tableID: 19247, columnID: 2, dataTypeID: 1043, dataTypeSize: -1, dataTypeModifier: 259, format: 'text' }, Field { name: 'password', tableID: 19247, columnID: 3, dataTypeID: 1043, dataTypeSize: -1, dataTypeModifier: 259, format: 'text' }, }Esto es lo que devuelve psql cuando ejecuto la consulta:
midterm=# SELECT * FROM users WHERE username = 'torontofam' AND password = '$2a$10$FB/BOAVhpuLvpOREQVmvmezD4ED/.JBIDRh70tGevYzYzQgFId2u.';; id | username | password | latitude | longitude ----+------------+--------------------------------------------------------------+------------+------------- 1 | torontofam | $2a$10$FB/BOAVhpuLvpOREQVmvmezD4ED/.JBIDRh70tGevYzYzQgFId2u. | 43.6523736 | -79.3857858 (1 row)Aquí está la consulta real solicitada de DB:
router.post("/login", (req, res) => { const { username, password } = req.body; console.log(req.body); const queryString = `SELECT * FROM users WHERE username = $1 AND password = $2;`; db.query(queryString, [username, password]) .then((data) => { console.log(data); const user = data.rows[0]; if (!user) { return res .status(400) .send({ message: "Username not found in database" }); } const validPassword = bcrypt.compareSync(password, user.password); if (!validPassword) { return res .status(400) .send({ message: "Password does not match username" }); } req.session.user_id = user.id; res.redirect("/"); }) .catch((err) => { res.status(500).json({ error: err.message }); });});
Parece que no puedo entender por qué regresa la solicitud de inicio de sesión: POST /api/users/login 400 26.831 ms - 44 {"mensaje":"Nombre de usuario no encontrado en la base de datos"}
Después de la depuración, descubrí por qué data.rows devolvía una matriz vacía.
El problema radica aquí:
const queryString = `SELECT * FROM users WHERE username = $1 AND password = $2;`; db.query(queryString, [username, password])No debería tener que seleccionar la contraseña también, ya que el nombre de usuario solo es suficiente para recuperar la fila.
Cambié el código a lo siguiente:
const queryString = `SELECT * FROM users WHERE username = $1;`; db.query(queryString, [username])Ahora está regresando:
{ username: 'torontofam', password: 'password' } { id: 1, username: 'torontofam', password: '$2a$10$FB/BOAVhpuLvpOREQVmvmezD4ED/.JBIDRh70tGevYzYzQgFId2u.', latitude: 43.6523736, longitude: -79.3857858 }¿Esto es MySQL? Intente usar signos de interrogación (?) en ambos lugares en lugar de $1 y $2.