Angularjs 登录身份验证重定向获取 -- 错误:发送标头后无法设置标头
Angularjs Login authentication redirection getting -- Error: Can't set headers after they are sent
对NodeJS/AngularJS来说非常新。验证 id 和密码后,我无法将登录页面重定向到另一个页面。
控制器中的代码如下,由路由"/login/check"触发:
exports.logincheck = function(req, res) {
User.findOne({email: req.body.email}).exec(function (err,user) {
if (!user) {
err = 'User not found.';
} else if (user.hashed_password == hashPW(req.body.password.toString())) {
req.session.regenerate(function () {
req.session.user = user.id;
req.session.username = user.username;
req.session.msg = 'Authenticated as ' + user.username ;
res.redirect('/');
});
} else {
err = 'Authentication failed.';
}
if (err) {
req.session.regenerate(function () {
req.session.msg = err;
res.status(404).send({err: 'User Not Found.'});
res.redirect('/login');
});
}
});
我的 AngularJS 代码如下:
var loginApp = angular.module('loginApp', []);
loginApp.controller('loginController', ['$scope', '$http', function($scope,$http){
$scope.status = '';
$scope.processForm = function(checkemail,checkpassword) {
$http.post('/login/check', { email : checkemail, password: checkpassword})
.success(function(data, status, headers, config) {
$scope.user = data;
$scope.error = "";
$scope.status = status;
})
.error(function(data, status, headers, config) {
$scope.user = {};
$scope.error = data;
$scope.status = status;
});
};
}]);
只是尝试从我的 HTML 表单中传递 2 个变量进行验证。我得到的错误是:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:700:10)
at ServerResponse.send (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:154:12)
at fn (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:934:10)
at View.exports.renderFile [as engine] (/Users/josh_loh/Code/project/node_modules/ejs/lib/ejs.js:353:10)
at View.render (/Users/josh_loh/Code/project/node_modules/express/lib/view.js:93:8)
at EventEmitter.app.render (/Users/josh_loh/Code/project/node_modules/express/lib/application.js:566:10)
at ServerResponse.res.render (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:938:7)
at /Users/josh_loh/Code/project/routes.js:52:7
at Layer.handle [as handle_request] (/Users/josh_loh/Code/project/node_modules/express/lib/router/layer.js:82:5)
at next (/Users/josh_loh/Code/project/node_modules/express/lib/router/route.js:110:13)
at Route.dispatch (/Users/josh_loh/Code/project/node_modules/express/lib/router/route.js:91:3)
at Layer.handle [as handle_request] (/Users/josh_loh/Code/project/node_modules/express/lib/router/layer.js:82:5)
at /Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:267:22
at Function.proto.process_params (/Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:321:12)
at next (/Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:261:10)
请帮忙。真的很想知道我理解错了什么。谢谢!
看起来控制器中至少有两个问题。
你res.status(404).send({err: 'User Not Found.'});
后跟res.redirect('/login');
. send
和redirect
都完成请求并响应请求,所以这基本上就像尝试响应两次一样。 这可能就是给您带来"无法设置标题"错误的原因。 这个类似问题的答案很好地总结了何时应该使用各种 res 方法。
您还将在 req 对象上设置值。 Req 仅提供有关请求的信息,通常应被视为只读对象。 只有 res 对象中的数据才会返回到客户端。
相关文章:
- Sencha Touch和远程服务器上的身份验证
- Javascript清除缓存以清除基本身份验证凭据
- REST的面向公众的身份验证机制
- 当需要身份验证时,ui路由器不会重定向
- 使用Facebook登录,但仍然可以获得:“;此标识池不支持未经身份验证的访问“;
- AJAX HTTP基本身份验证解决方案
- 身份验证后获取Facebook图片
- 如何对单个页面进行密码保护(这不是身份验证系统的一部分)
- Twitter应用程序专用身份验证
- Passport.js成功的身份验证根本没有调用
- 如何使用 ntlm 在 node.js 应用程序中设置身份验证层
- 如果我的站点只有 2 或 3 个管理员,我是否应该设置 Passport.js 或类似进行身份验证
- 如何在Javascript和PHP中设置带有URL身份验证的API web密钥
- 故障排除Firebase身份验证设置
- 使用HTML和Javascript或Angularjs进行身份验证设置
- 如何在节点 + Express 应用中设置路由以传递身份验证方法
- 每个身份验证不设置 req.user
- Angularjs 登录身份验证重定向获取 -- 错误:发送标头后无法设置标头
- 使用Firebase设置Twitter身份验证时遇到麻烦
- 如何实现将新的Firebase自定义身份验证最大过期时间设置为1小时的用例