Así que tenemos un sistema de autenticación, pero quiero que no distinga entre mayúsculas y minúsculas para la entrada de correo electrónico.
La función se ve así:
Auth.authenticate({ email, password })Auth es un modelo mongoose, y los usuarios se almacenan en una base de datos mongo. Esto funciona, pero distingue entre mayúsculas y minúsculas y algunos usuarios tuvieron problemas para conectarse.
Primero probé este código:
Auth.authenticate({ email: { $regex : email,$options:"i" }, password: password })Pero no puedo hacer que funcione, siempre recibo este error: "No se puede usar la contraseña con String". y no encuentro en internet como solucionar esto.
Así que probé un método diferente, en lugar de usar la función de autenticación, obtendré el usuario y compararé la contraseña yo mismo de esta manera:
const user = await Auth.findOne({ "email" : { $regex : email,$options:"i" } }) if (user.password == password) { return true }Pero la cuestión es que la contraseña está encriptada con mongoosePii. Entonces, cuando comparo las dos contraseñas, primero tengo que cifrar la contraseña que recibí del usuario de esta manera:
password = await hashPassword(password)Pero obtengo un resultado diferente... Las dos contraseñas están encriptadas con la misma clave, pero por alguna razón no dan el mismo resultado y no puedo entender por qué.
No estoy seguro de qué solución es mejor, pero ambas están bien para mí si sabes cómo resolver una de ellas.
Podría hacerlo de manera más simple, escribiendo en minúsculas cada correo electrónico y teniendo un validador en su Schema . De esta manera, no tiene que escribir ninguna validación sobre los correos electrónicos. Al igual que:
npm i validator const { isEmail } = require("validator"); const schema = Schema( { email: { type: String, required: [true, "Please enter an email"], unique: true, lowercase: true, validate: [isEmail, "Please enter a valid email"], } }, );