[英]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>
我忘记了什么吗? 告诉我! 谢谢 :)
在控制器代码,你findOne
从userCollection
,检查是否有任何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.