簡體   English   中英

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'); sendredirect完成請求並響應請求,因此基本上就像嘗試響應兩次一樣。 這可能是給您“無法設置標題”錯誤的原因。 這個類似問題的答案很好地總結了何時應使用各種res方法。

您還在req對象上設置值。 Req只是為您提供有關請求的信息,通常應將其視為只讀對象。 只有res對象中的數據將返回給客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM