Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
Autenticación básica ComparePassword

Actualmente estoy trabajando en una "Autenticación básica" para Node JS. Debería aceptar solicitudes como las siguientes:

 POST http://localhost:8080/authenticate/ Authorization: Basic YWRtaW46MTIz

AuthenticationService.js primero lee el encabezado y luego pasa todo a Userservice.js

Servicio de autenticación.js

 async function basicAuth(req, res, next) { // make authenticate path public if (req.path === '/') { return next(); } if (!req.headers.authorization || req.headers.authorization.indexOf('Basic ') === -1) { return res.status(401).json({ message: 'Missing Authorization Header' }); } // verify auth credentials const base64Credentials = req.headers.authorization.split(' ')[1]; const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii'); const [username, password] = credentials.split(':'); console.log("AuthenticationService "+username+" "+password); const user = await userService.authenticate({ username, password }); if (!user) { return res.status(401).json({ message: 'Invalid Authentication Credentials' }); } req.user=user res.send(user) next(); } module.exports = { basicAuth }

El servicio de usuario comprueba si se encuentra el usuario y comprueba si la contraseña es válida, solo entonces el objeto de usuario se envía de vuelta al servicio de autenticación.

UserService.js

 async function authenticate({ username, password }) { let user = await User.findOne({userID: username}) user.comparePassword(password.toString(), function(err,isMatch) { if (err){ console.log("error") throw err; } if(isMatch) { console.log("Password correct") } if(!isMatch){ console.log("Password wrong") }}); if(user){ return user; } else{ return null; } } module.exports = { authenticate }

El .comparePassword-Method está dentro de Usermodel.js :

 UserSchema.methods.comparePassword = function(candidatePassword, cb) { bcrypt.compare(candidatePassword, this.password, function(err, isMatch) { if (err) return cb(err); cb(null, isMatch); }); }; const User = mongoose.model("User", UserSchema); module.exports = User;

¿Cómo puedo enviar el valor booleano de isMatch en Userservice.js fuera de su alcance, para poder enviar el objeto de usuario de vuelta a AuthenticationService.js dependiendo de la contraseña correcta? ¿Cómo puedo mejorar ese código?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Borro el método de autenticación en Userservice.js y simplemente llamo al método crud. Después de eso, llamo al método de comparación y dentro del bloque if/else paso un res.send .

 function basicAuth(req, res, next) { if (!req.headers.authorization || req.headers.authorization.indexOf('Basic ') === -1) { return res.status(401).json({ message: 'Missing Authorization Header' }); } // verify auth credentials const base64Credentials = req.headers.authorization.split(' ')[1]; const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii'); const [username, password] = credentials.split(':'); console.log("AuthenticationService " + username + " " + password); userService.findUserById(username, function(error, user) { user.comparePassword(password.toString(), function(err, isMatch) { if (err) { console.log("Fehler") throw err; } /*Passwort richtig*/ if (isMatch) { res.send(user); } /*Passwort falsch*/ if (!isMatch) { res.status(401).json({ message: 'Passwort und userID stimmen nicht überein.' }); } }); }) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda