PassportJS重定向在使用AngularJS$http开机自检时不起作用
PassportJS redirect not working when using AngularJS $http to POST
我正在使用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>
主控制器.js
$scope.loginSubmit = function(n,p) {
$http.post('/login', {
email: n,
password: p
});
};
为什么 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);
});
我们没有使用res.redirect()
,而是简单地将消息发送回Angular。
控制器
$http.post('/login', {
email: n,
password: p
})
.success(function(data) {
if (data.message === 'logged in') {
$location.path('/presents');
});
相关文章:
- 开机自检无法正常工作,出现错误
- 类型错误:无法读取开机自检后未定义的属性“正文”(平均值)
- 在 AngularJS 和 CodeIgniter3 中开机自检数据时出现 CORS 错误
- html 开机自检数据未发送
- 快递.js开机自检空要求正文
- 取消选中通过开机自检 [] 中的回显选中的复选框
- 通过开机自检将 XML 发送到另一台服务器
- 控制器中的 MVC3 自动完成和开机自检方法
- 角度 UI 模式开机自检
- 控制器操作参数未从 AJAX 开机自检正确填充
- 王牌编辑器 - 通过开机自检在服务器上保存/发送会话
- ASP.NET Web API 2 - 如何开机自检
- 无法向服务器发送开机自检请求
- 在没有插件的情况下验证验证码?-- 跨服务器开机自检
- 默认$resource开机自检数据
- 尝试开机自检“选择”HTML表单输入时出现PHP错误
- 开机自检时重定向
- JSON 数组导致开机自检后出现额外的括号
- 春季开机自检未返回有效号码
- PassportJS重定向在使用AngularJS$http开机自检时不起作用