我有一个基本的登录控制器,其表单可以更新用户的$ scope。当他们点击按钮时,会触发login()函数。
<br>
这是我的/ login
的路由.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);
});
}
}]);
这是我的护照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);
});
。
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);
}
}
});
}));
时,控制器正在接收html页面res.redirect('/view1')
而不是实际被重定向。 (response.data
)
如果这不正确,我应该在用户成功登录后如何实际处理重定向到$http.post().then(function (response){});
?
答案 0 :(得分:2)
当你从javascript调用后端时,你基本上在场景后面进行ajax调用,这对于重定向和其他HTTP头不起作用。
为了将用户重定向到正确的页面,您必须检查后端响应中的HTTP状态代码,并通过angular将用户重定向到正确的站点。这看起来像这样:
if(response.status == 302) {
$window.location.href = '/view1';
}
或者不是发送重定向,您可以从服务器发送状态更新,如:
res.json({
success: true,
redirectTo: '/view1'
});
并在客户端上解析它:
if(response.data.success){
$window.location.href = response.data.redirectTo;
}