我正在设置sails.js项目,我有点担心我的登录方法及其安全性。
我从研究和我自己的代码一起攻击它,所以想确保它是安全的。
基本上,我将通过Bcrypt哈希发送的密码进行比较,如果它们不匹配我们会显示错误,如果他们这样做,我们会通过为用户设置会话ID来验证用户身份。
具体来说,这段代码是否安全?
其次,我相信这段代码绝对可以优化,特别是在我调用外部函数来触发成功或错误消息的情况下。你会怎么做呢?
login: function (req, res) {
// See `api/responses/login.js`
User.findOne({
email: req.param('email')
}).exec(function (err, user){
if (err) {
return res.serverError(err);
}
if (!user || !req.param('password')) {
sails.log.debug('Password or email is missing.');
} else {
bcrypt.compare(req.param('password'), user.password, function(err, res) {
if (err) {
return res.serverError(err);
} if(!res){
sails.log.debug('password is incorrect!!!!');
passwordIncorrect(user);
}if(res){
sails.log.debug('password is correct!!!!!');
passwordCorrect(user);
}
});
}
});
function passwordCorrect(user){
//Set session for user
req.session.me = user.id;
if (req.wantsJSON || !inputs.successRedirect) {
return res.ok('Logged in successfully!');
}
return res.redirect(inputs.successRedirect);
}
function passwordIncorrect(user){
if (req.wantsJSON || !inputs.invalidRedirect) {
return res.badRequest('Invalid username/password combination.');
}
return res.redirect(inputs.invalidRedirect);
}
},