Javascript 奇怪的登录错误导致服务器崩溃-AngularJS/MEAN stack
我是AngularJS的新手程序员,我的登录功能有一个小问题。似乎每当我键入一个不存在随机密码的用户名时,服务器就会崩溃,但如果用户名已注册且我键入了随机密码,服务器不会崩溃。 这真的很烦人,我希望你们能给我一些提示。 我会把代码贴在下面 首先,这里是服务器崩溃时的屏幕截图- server.js-控制台指向该文件中的第100行,即“bcrypt.compare(req.body.password等)”,这会使服务器崩溃Javascript 奇怪的登录错误导致服务器崩溃-AngularJS/MEAN stack,javascript,angularjs,mean-stack,Javascript,Angularjs,Mean Stack,我是AngularJS的新手程序员,我的登录功能有一个小问题。似乎每当我键入一个不存在随机密码的用户名时,服务器就会崩溃,但如果用户名已注册且我键入了随机密码,服务器不会崩溃。 这真的很烦人,我希望你们能给我一些提示。 我会把代码贴在下面 首先,这里是服务器崩溃时的屏幕截图- server.js-控制台指向该文件中的第100行,即“bcrypt.compare(req.body.password等)”,这会使服务器崩溃 app.put('/users/signin', function
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>
登录
我忘了什么吗?告诉我!谢谢:)在您从
userCollection
找到的控制器代码中,在继续之前检查是否存在任何错误。对用户的存在执行相同的操作。大概是这样的:
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();
}
});
}
});
});
});
userscolection.findOne({username:req.body.username}
正在返回一个空用户。console.log(user)
在bcrypt调用之前。使用if语句修复了它。如果用户为空,将发送一个错误的请求,并使服务器保持活动状态。似乎工作正常,但如果您知道更好的方法,请共享!)昨天也是这样,谢谢!我唯一缺少的是,如果我尝试使用错误的密码登录帐户,则会显示“用户名尚未注册”消息:)忘记了一件事。就安全性而言,不建议在错误消息中指出用户名不存在或密码不正确,因此我编辑了答案以显示应发送的确切错误消息。希望这有帮助。是的,我写了一些类似的东西。再次感谢:)