我正在使用passportJS进行用户身份验证。这是我的应用程序的路由,它验证登录信息。
app.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
当我的表单如此时,重定向会起作用:
<form action="/login" method="post">
...
</form>
但是当我使用Angular的ng-submit
和$http.post('/login')
方法时,重定向不会触发。登录 工作,但重定向不起作用。
<form ng-submit="submitLogin(name,password)">
...
</form>
MainController.js
$scope.loginSubmit = function(n,p) {
$http.post('/login', {
email: n,
password: p
});
};
为什么Angular会阻止重定向工作?
答案 0 :(得分:5)
我不确定为什么重定向不适用于Angular,但我找到了解决问题的方法。
我们需要将内容发送回Angular,然后使用$ location.path()来处理重定向。
如果简单的身份验证功能不够,PassportJS建议使用自定义回调。
app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
res.send({
message: 'no user'
});
}
req.login(user, function(err) {
if (err) {
return next(err);
}
res.send({
message: 'logged in'
});
});
})(req, res, next);
});
我们只是将消息发送回Angular,而不是使用res.redirect()
。
<强>控制器强>
$http.post('/login', {
email: n,
password: p
})
.success(function(data) {
if (data.message === 'logged in') {
$location.path('/presents');
});