update sistema para operativo node home framework actualizar node.js passport.js

node.js - home - sistema operativo para node js



Pasaporte+Node.js/Inicio de sesión automático después de agregar el usuario (3)

Estoy usando el pasaporte para la autenticación y el manejo de sesiones. Todo funciona bien hasta ahora. Implementé el formulario "Iniciar sesión" para agregar nuevos usuarios a la aplicación. Después de agregar un usuario, me gustaría iniciar sesión automáticamente.

¿Cuál es la mejor manera de lograr esto? ¿Debo redireccionar a "/ login" con las credenciales de usuario o hay otra / mejor manera (llamar a serializeUser) para hacer eso?

Hasta ahora creo que no entendí realmente cómo funciona la función "hecho" (en serializeUser y LocalStrategy) o qué está haciendo ...

Aquí está mi código:

passport.serializeUser(function(user, done) { done(null, user._id); }); passport.deserializeUser(function(id, done) { authProvider.findUserById(''users'', id, function (err, user) { done(err, user); }); }); passport.use(new LocalStrategy( function(email, password, done) { authProvider.getUserByEmail(''users'', email, function(error, user){ if(error) { return done(error); } if (!user) { return done(null, false, { message: ''Unknown user '' + email });} if (user.password != password) { return done(null, false);} return done(null, user); }); } )); app.post(''/login'', passport.authenticate(''local'', { failureRedirect: ''/login''}), function(req, res) { res.redirect(''/'');}); app.post(''/sign'', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ if(error){ res.redirect(''/sign''); } else { res.redirect(''/''); } }); });

¿Alguien sabe cómo hacer esto?


Utilice el código de la siguiente respuesta de @Weston , porque es más universal y directo

Debería verse algo como esto

app.post(''/sign'', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ if(error){ res.redirect(''/sign''); } else { passport.authenticate(''local'')(req, res, function () { res.redirect(''/account''); }) } }); });

No estoy seguro sobre el nombre de la estrategia, pero por defecto, LocalStrategy debería proporcionar el nombre ''local''

http://passportjs.org/guide/authenticate/


Basado en la Guía de pasaportes, req.login() está diseñado para este propósito exacto.

Esta función se usa principalmente cuando los usuarios se registran, durante los cuales se puede invocar a req.login() para iniciar sesión automáticamente en el nuevo usuario registrado.

Modificar el código de krasu:

app.post(''/sign'', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ if ( error ){ res.redirect(''/sign''); } else { req.login(user, function (err) { if ( ! err ){ res.redirect(''/account''); } else { //handle error } }) } }); });

El error potencial de la devolución de llamada de login() provendría de su función serializeUser() .


Intenta con:

app.post(''/sign'', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ passport.authenticate(''local'', (err, user) => { req.logIn(user, (errLogIn) => { if (errLogIn) { return next(errLogIn); } return res.redirect(''/account''); }); })(req, res, next); }); });