Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

601
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda