Recibo el siguiente error:
XMLHttpRequest no puede cargar http://localhost:4200/#/partners . El tipo de contenido del campo de encabezado de solicitud no está permitido por Access-Control-Allow-Headers en la respuesta de verificación previa.
fragmento de server.js:
app.use(function(req, res, next){ res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.header('Access-Control-Allow-Credentials', "true"); next(); }); . . . app.post("/login", function(req, res, next) { passport.authenticate("local", function (err, user, info) { if (err) { return next(err); } if (!user){ return res.redirect(home_connection+'/#/'); } req.logIn(user, function(err){ if(err){ return next(err); } return res.redirect(home_connection+"/#/partners"); }); })(req, res, next); } ); Tenga en cuenta que este error aún persiste incluso después de configurar los encabezados Access-Control-Allow-* . La ruta a la que Express debe redirigir es una ruta Angular2, /#/partners .
Usé Angular2 para redirigir en lugar del servidor Node.
En lugar de redirigir a la ruta dentro del servidor Node, solo devolví una confirmación de éxito como respuesta. Cuando Angular2 recibe la confirmación de éxito, enruta la aplicación a la ubicación adecuada.
Modifiqué /login a lo siguiente:
app.post("/login", cors(), passport.authenticate("local"), function(req, res){ res.status(200).json(req.user); }); Aviso res.status(200).json(req.user); simplemente devuelve el objeto de usuario.
El fragmento de código Angular2 que llama a /login parece (tenga en cuenta que loginUser es una función en UserService que llama a las publicaciones a /login ):
this.userService .loginUser(this.user.phone, this.third.value.code.replace(/ /g, '')) .then((resp) => { if(resp) this.router.navigate(['/partners']); else { this.third.setValue({"code":""}); this.invalidCode = true; } }).catch((err) => { this.invalidCode = true; }); Tenga en cuenta que this.router.navigate(['/partners']); maneja la redirección a /partners .