Mi aporte en el código
modelo User
// Metodo de clase para recuperar a un usuario si las credenciales de acceso son correctas
async validateUser(data) {
// Ordenar la colección por email, consultar el usuario por su email (no me interesa escuchar cambios en la data, por ello once)
const queryUser = await this.collection.orderByChild("email").equalTo(data.email).once("value")
// Obtengo el objeto con los resultados de mi consulta {objId: {}, objId: {}, objId: {}}
const userFound = queryUser.val()
if (userFound) {
// Obtengo un arreglo con los ids de los documentos que forman parte de los resultados de mi busqueda. Me interesa quedarme con el elemento (ObjectId) del primer documento, mas no con el arreglo
const userId = Object.keys(userFound)[0]
// comparar si las contraseñas son correctas {documentoResultado.objectId.password}
const passwordRight = await bcrypt.compare(data.password, userFound[userId].password)
return (passwordRight) ? userFound[userId] : false;
}
return false
}
Controladores para el login y validación de usuarios
/**
* Controladores encargados de mostrar la vista de login (formulario)
* Procesar la data del usuario para verificar que sus credenciales de acceso sean las correctas
* Leer en la base de datos (Firebase)
*/
function login(req, h) {
return h.view('login', { title: 'Login' })
}
async function validateUser(req, h) {
try {
const userLogin = await user.validateUser(req.payload)
return userLogin
} catch (error) {
console.error(error)
return h.response('Problemas al logear el usuario').code(500)
}
}
Rutas
/**
* Controladores encargados de mostrar la vista de login (formulario)
* Procesar la data del usuario para verificar que sus credenciales de acceso sean las correctas
* Leer en la base de datos (Firebase)
*/
function login(req, h) {
return h.view('login', { title: 'Login' })
}
async function validateUser(req, h) {
try {
const userLogin = await user.validateUser(req.payload)
return userLogin
} catch (error) {
console.error(error)
return h.response('Problemas al logear el usuario').code(500)
}
}```
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?