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

189
Vistas
Cómo validar contraseña en pasaporte-local-mangoose

Estoy usando pasaporte con pasaporte-local-mangoose para registrar e iniciar sesión de usuarios.

Este es el código que uso para iniciar sesión de usuarios:

 passport.use(new localStrategy({ usernameField: 'email' }, function(email, password, done) { User.findOne({ email: email }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username or password.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect username or password.' }); } return done(null, user); }); }));

Todo funciona divertido pero user.validPassword. Lo defino en el modelo de usuario:

 userSchema.methods.validPassword = function(password) { // What should I write here? };

Dado que la contraseña hash se guardará en la base de datos, no sé cómo validar la contraseña.

Por ejemplo, este es un usuario guardado en la base de datos{

 "_id" : ObjectId("5901d55c30967512407cdcd0"), "salt" : "7e76e1de50856c0a0e219c48609e0c86e8036bd4aa48e5161635f88dd19b695b", "hash" : "", "username" : "stve45", "email" : "stebe@companycom", "name" : "Steve", "__v" : 0 }

También uso pasaporte-local-autenticación simple.

Cualquier ayuda será apreciada, muchas gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está utilizando pasaporte-local-mangoose, creará una sal y un hash al tomar su contraseña. Es por eso que en su esquema de usuario no tiene que guardar el campo de contraseña.

Pero la estrategia local para pasaporte-local-mangosta es bastante diferente de la estrategia local de pasaporte normal. Es como

 passport.use(new LocalStrategy(User.authenticate()));

Esto verificará la contraseña ingresada y la verificará con la sal y el hash.

El código que escribió es para la estrategia local normal. Eso no debería usarse si está usando pasaporte-local-mangoose.

Así es como debe srializar y desirializar pasaporte-local-mangoose:

 passport.serializeUser(User.serializeUser());passport.deserializeUser(User.deserializeUser());
over 4 years ago · Santiago Trujillo Denunciar

0

Supongo que tiene un método para generar la sal y el hash antes de guardar.

En su método validPassword, llama al mismo método y compara el resultado de la entrada de la contraseña del usuario y lo compara con lo que tiene en la base de datos. Si coincide, entonces está bien.

Como alternativa, existen bibliotecas para gestionar esto. Yo uso bcrypt . Vea una muestra aquí:

 adminSchema.pre('save', function(next) { var user = this; // only hash the password if it has been modified (or is new) if (!user.isModified('password')) { return next(); } // password changed so we need to hash it (generate a salt) bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { if (err) { return next(err); }else{ // hash the password using our new salt bcrypt.hash(user.password, salt, function(err, hash) { if (err) { return next(err); } // override the cleartext password with the hashed one user.password = hash; next(); }); } }); }); adminSchema.methods.comparePassword = function(password, cb) { console.log('comparing password'); bcrypt.compare(password, this.password, function(err, isMatch) { cb(err, isMatch); }); };
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay un código de ejemplo. Tenga en cuenta que la función User.findOne() está lejos de estar completa. Está ahí solo para que vea dónde se encuentra este código con respecto al suyo y para darle una idea de los cambios que se deben realizar.

 passport.use('local.signup', new LocalStrategy({ usernameField:'email', //it can be email or whatever one chooses passwordField:'password', confirmField:'password', passReqToCallback:true//here is the trick.u pass everything you want to do to a callback },function (req,email, password, done) { req.checkBody('email','Invalid e-mail address...').notEmpty().isEmail().normalizeEmail();//validate email req.checkBody('password','Invalid password...').notEmpty().isLength({min:8});//validate pass to be min 8 chars but you can provide it with checking for capital letters and so on and so forth var errors = req.validationErrors(); if(errors){ var messages = []; errors.forEach(function (error) { messages.push(error.msg) }); return done(null, false, req.flash('error', messages)) } User.findOne({ email: req.body.email }, function (err, user) { // Make sure user doesn't already exist if (user) return done(null, false, {message:'The email address you have entered is already associated with another account.' });
over 4 years ago · Santiago Trujillo 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