Lo siento si mi pregunta es confusa.
¿Por qué cuando consulto
SELECT email FROM users WHERE email = 'some-email@email.com' AND password = 'pass134';Estoy usando un servidor Node.js con SQL, y cuando uso:
app.get('/login', function(req, res) { var params = '?' + req.url.split('?').pop(); // "?email=test@test.net&pass=13456" const pass = (new URLSearchParams(params).get('pass')); // "13456" connection.query(` SELECT email FROM users WHERE email = '${email}' AND password '${pass}'; `, function(err, result) { if (err) throw err; if (typeof result[0].email != "undefined") { // User logged in successfully } else { // The email/password is incorrect } }); }); Intento ir a https://www.example.com/login?email=test@test.com&pass=Pass13456 e inicia sesión.
Pero cuando la contraseña está en minúsculas o mayúsculas, aún inicia sesión.
Creo que esta es la consulta WHERE que no es lo suficientemente específica.
¿Cómo puedo hacer que SQL seleccione un valor con DONDE como un valor específico?
(por ejemplo, WHERE str = 'only equal to this string, not lowercase or uppercase'; )
Entonces, donde las cláusulas no distinguen entre mayúsculas y minúsculas en mysql. Para solucionarlo, puede devolver la contraseña de la consulta, mantenerla en el nodo como una variable y luego compararla (una solución)
O podría usar una comparación binaria. Todavía necesito probar esto, pero creo que solo agrega la palabra clave "BINARIO" a su consulta. Asi como
SELECCIONE el correo electrónico DE los usuarios DONDE correo electrónico = 'algún-email@email.com' Y contraseña BINARIA = 'pass134';
Estoy escribiendo esto en mi teléfono, así que no sé si es lo mejor y todavía necesito probar la solución binaria.