Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

598
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!