Me gustaría mostrar un error específico en lugar de las "credenciales incorrectas" genéricas
Por ejemplo, si alguien inserta la contraseña pero el correo electrónico es correcto, solo debería aparecer "la contraseña es incorrecta".
¿Cómo puedo lograr eso?
app.post('/login', async (req, res) => { const client = new MongoClient(url) const data = req.body.formData try { await client.connect() const database = client.db("data") const collection = database.collection("utenti") const result = await collection.findOne({ email: data.email, password: data.password }) console.log(result) if (result.email && result.password) { res.status(200).send("Success") } } catch (err) { res.status(400).send("Wrong credentials") } })Para lograr lo que desea, primero debe verificar la base de datos para encontrar al usuario con su correo electrónico.
Luego, si la encuentra, puede verificar si la contraseña es correcta, si no encuentra el usuario, puede enviar la información de vuelta.
Luego, si la contraseña está bien, puede iniciar sesión como usuario, si no, envíe un mensaje sobre la contraseña incorrecta.
Pero una vez más, ¡cifre su contraseña! Y menos información le das a un atacante, la mejor protegida es tu aplicación.
Recomiendo no mostrar que "la contraseña es incorrecta" porque creará una laguna en su autenticación. Pero he proporcionado un código para verificar la contraseña por separado de su mensaje.
app.post('/login', async (req, res) => { const client = new MongoClient(url) const data = req.body.formData try { await client.connect() const database = client.db("data") const collection = database.collection("utenti") const email = await collection.findOne({ email: data.email, }) console.log("email is correct", email); if (!email) { res.status(400).send("Your email is incorrect") } const password = await collection.findOne({ password: data.password, }); if (email && password) { res.status(200).send("Success") } if (!password) { res.status(400).send("Only Email is correct and password is incorrect", email); } } catch (err) { res.status(400).send("Wrong credentials") } })debe validar individualmente en alguna función (en su caso para correo electrónico y contraseña) y lanzar excepciones específicas.
Algo como esto (en python):
fun validate_email_password(email, password): email = db.findByEmail(email) if not email: throw EmailNotFound() password = db.findByPassword(password) if not password: throw passwordNotFound()capture estas excepciones específicas en su código y tírelas. Esta solución tiene un costo de db.