¿Por qué res.redirect no me redirige realmente?

Tengo un controlador de inicio de sesión básico con un formulario que actualiza el scope de $ del usuario. Cuando hacen clic en un botón, se activa la función de inicio de sesión ().

.controller('loginCtrl', ['$scope','$http',function($scope,$http) { $scope.user = { 'username' : "", 'password' : "" }; $scope.login = function(){ $http.post('/login', $scope.user).then(function (response){ console.log(response.data); }); } }]); 

Y aquí está mi ruta para / login

 app.post('/login', function(req,res,next){ passport.authenticate('local-login', function(err, user, info){ if (err){ console.log(err); return next(err); } else if (!user){ return res.send(info); } else { req.logIn(user, function(err){ if (err){ return next(err); } else { return res.redirect('/view1'); } }); } })(req,res,next); }); 

y aquí está mi pasaporte local-login .

 passport.use('local-login', new LocalStrategy({ passReqToCallback: true // Allows us to pass back the entire request to the callback function }, function (req, email, password, done){ // Checks database via mongoose ,function (err,user){ if (err){ return done(err); } else { if (!user){ return done(null, false, { message : 'No user found.'}); } else if (!user.validPassword(password)) { return done(null, false, { message : 'Incorrect password'}); } else { return done(null, user); } } }); })); 

El principal problema aquí es cuando se res.redirect('/view1') el res.redirect('/view1') en mi lógica de enrutamiento cuando el controlador recibe la página html como response.data lugar de ser redirigido. ( $http.post().then(function (response){}); )

Si esto es incorrecto, ¿cómo debo manejar la redirección a /view1 después de que el usuario haya iniciado sesión correctamente?

Como estás llamando al backend desde javascript, básicamente haces una llamada ajax detrás de escena, que no funcionará con redirecciones y otros encabezados HTTP.

Para redirigir al usuario a la página correcta, debe verificar el código de estado HTTP en la respuesta de su backend y redirigir al usuario al sitio correcto a través de angular. Que podría verse algo como esto:

 if(response.status == 302) { $window.location.href = '/view1'; } 

o en lugar de enviar una redirección, puede enviar una actualización de estado desde el servidor como:

 res.json({ success: true, redirectTo: '/view1' }); 

y analizarlo en el cliente:

 if(response.data.success){ $window.location.href = response.data.redirectTo; }