Rya*_*uck 4 javascript redirect angularjs passport.js
我正在使用passportJS进行用户身份验证.这是我的应用程序的路由,它验证登录信息.
app.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
Run Code Online (Sandbox Code Playgroud)
当我有我的表单时,重定向工作:
<form action="/login" method="post">
...
</form>
Run Code Online (Sandbox Code Playgroud)
但是,当我用角的ng-submit一个$http.post('/login')方法,重定向不会触发.登录确实有效,但重定向不起作用.
<form ng-submit="submitLogin(name,password)">
...
</form>
Run Code Online (Sandbox Code Playgroud)
MainController.js
$scope.loginSubmit = function(n,p) {
$http.post('/login', {
email: n,
password: p
});
};
Run Code Online (Sandbox Code Playgroud)
为什么Angular会阻止重定向工作?
我不确定为什么重定向不适用于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);
});
Run Code Online (Sandbox Code Playgroud)
res.redirect()我们只需将消息发送回Angular,而不是使用.
调节器
$http.post('/login', {
email: n,
password: p
})
.success(function(data) {
if (data.message === 'logged in') {
$location.path('/presents');
});
Run Code Online (Sandbox Code Playgroud)