繁体   English   中英

奇怪的登录错误导致服务器崩溃-AngularJS / MEAN堆栈

[英]Strange Login error causes server to crash - AngularJS / MEAN stack

我是AngularJS的新手程序员,我的登录功能有一个小问题。 看来,只要我输入不存在随机密码的用户名,它就会使服务器崩溃,但是如果注册了该用户名并输入随机密码,它不会崩溃。 这真的很烦人,我希望你们对我有一些提示。 我将在下面发布代码。

首先,这是服务器崩溃时的屏幕截图-

在此处输入图片说明

server.js-控制台指向此文件中的第100行,即“ bcrypt.compare(req.body.password等)”,这会使服务器崩溃。

    app.put('/users/signin', function (req, res, next) {

    db.collection('users', function (err, usersCollection) {

        usersCollection.findOne({username: req.body.username}, function (err, user) {

            bcrypt.compare(req.body.password, user.password, function (err, result) {
                if (result) {
                    var token = jwt.encode(user, JWT_SECRET);
                    return res.json({token: token});
                } else {
                    return res.status(400).send();
                }
            });
        });
    });
});

index.html-这是我保存控制器的文件。

$scope.signIn = function () {

                if ($scope.signin.$valid) {
                    $http.put('/users/signin', { username: $scope.username, password: $scope.password })
                    .then(function (res) {
                        $cookies.put('token', res.data.token);
                        $cookies.put('currentUser', $scope.username);
                        $rootScope.token = res.data.token;
                        $rootScope.currentUser = $scope.username;
                    }
                )}
                else {
                    alert('Invalid credentials. Please try again.');
                }

                    };

登录HTML代码。

<div class="panel-body">
                        <br />
                        <form name="signin">
                            <div class="form-group-md">
                                <input type="text" ng-required="true" placeholder="Username" class="form-control" ng-model="username">
                            </div>

                            <br />
                            <div class="form-group">
                                <input type="password" ng-required="true" placeholder="Password" class="form-control" ng-model="password">
                            </div>
                            <br />

                            <button type="button" class="btn btn-success btn-md" ng-click="signIn()">Sign in</button>
                        </form>
                    </div>

我忘记了什么吗? 告诉我! 谢谢 :)

在控制器代码,你findOneuserCollection ,检查是否有任何err ,然后再继续。 对存在的user执行相同的user 像这样的东西:

app.put('/users/signin', function (req, res, next) {
db.collection('users', function (err, usersCollection) {
    usersCollection.findOne({username: req.body.username}, function (err, user) {
        if(err){
            console.log("Error : " + JSON.stringify(err));
        }
        if(!user){
            return res.send(404, "Invalid Username or Password.");
        }
        if(user){
            bcrypt.compare(req.body.password, user.password, function (err, result) {
                if (result) {
                    var token = jwt.encode(user, JWT_SECRET);
                    return res.json({token: token});
                } else {
                    return res.status(400).send();
                }
            });
        }
    });
});
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM