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

605
Vistas
¿Cómo cambiar el pasaporte para usar el correo electrónico en lugar del nombre de usuario para la autenticación?

Quiero usar el correo electrónico y la contraseña del usuario para iniciar sesión. Pero en el pasaporte debe usar el nombre de usuario.

He probado muchos ejemplos sobre cómo hacer eso. Pero no trabajado. El verdadero problema es cuando la aplicación quiere guardar el registro en la base de datos. Aunque he cambiado el código para buscar el campo de correo electrónico y no de nombre de usuario, este es el último registro guardado en la base de datos:

 'name': 'joseph', 'username' : 'example@gmail.com', . .

Pero no quiero que el correo electrónico se guarde como nombre de usuario. Y cuando lo cambio con mongoose después del registro del usuario, sería correcto, pero nuevamente el problema vendrá cuando la aplicación quiera autenticar al usuario.

Buscará el campo de nombre de usuario en la base de datos, no en el correo electrónico. Debido a que el usuario proporcionará un correo electrónico como nombre de usuario, el inicio de sesión fallará.

Código:

 app.get("/register", function(req, res) { var newUser = new User({ username : req.body.username, email : req.body.email, name: req.body.name }); User.register(newUser, req.body.password, function(err, user) { if (err) { req.flash('error', "An error ocurred, please try again."); return res.redirect('back'); } else { passport.authenticate("local")(req, res, function() { req.flash("success", "Welcome"); res.redirect("/admin"); }); } }); });

Este código registra al usuario de la manera que quiero, pero el problema es sobre el inicio de sesión:

 router.post('/login', middleware.outLoggedIn, passport.authenticate("local", { successRedirect: "/admin", failureRedirect: "/login", failureFlash: "Invalid username or password", successFlash: "Welcome!" }));

Siempre falla, porque obtendrá el correo electrónico del usuario proporcionado en el formulario de inicio de sesión, luego lo comparará con el de la base de datos. Y dado que guardé al usuario con el correo electrónico y el nombre de usuario, comparará el correo electrónico proporcionado en el formulario de inicio de sesión con el campo de nombre de usuario en la base de datos. Y FRACASO.

Este es el usuario en la base de datos:

 { "_id" : ObjectId("5901cc5c0256ed17b4d61960"), "salt" : "---", "hash" : "---", "username" : "joseph320", "email" : "example@gmail.com", "name" : "joseph", "__v" : 0 }

(El formulario de inicio de sesión requiere correo electrónico y contraseña)

También he hecho esto:

 passport.use(new localStrategy({ usernameField: 'email' }, User.authenticate()));

Realmente aprecio si me puede mostrar cómo arreglar eso.

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

0

¿Puede proporcionar más de su código? Aquí es importante algo de contexto, como qué módulos npm está utilizando para leer y escribir en su base de datos.

** Si está utilizando passport-local-mongoose

Dijiste que estás usando mangosta, y parece que podrías estar usando passport-local-mongoose además de eso. Si este es el caso, puede ver las opciones para passport-local-mongoose . Esto también incluye una opción de campo de nombre de usernameField , que indica dónde desea que se almacene el "nombre de usuario". El uso para eso se vería así:

 User.plugin(passportLocalMongoose, {usernameField: 'email'})
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