У меня есть довольно общий код восстановления пароля, который запрашивает электронное письмо, и отправляет ссылку на пароль, если существует электронное письмо или печатает сообщение, если это не так. Я хочу, чтобы люди не пытались эффективно собирать данные учетной записи. Я понимаю, что поскольку Node является однопоточным, сон блокирует все другие действия. Что является хорошим способом продлить действие получения пользовательских данных (как полная секунда).Node Sleep Command при восстановлении пароля - предотвращение сбора урожая
app.post('/login/recover', function(req, res, next) {
async.waterfall([
function(done) {
// generate hash here
},
function(token, done) {
var genReset = function(user) {
if (!user) {
// SLEEP HERE!?!?!?
req.flash('failureMessage', 'No account with that email address exists.');
return res.redirect('/login/recover');
}
user.resetPasswordToken = token;
user.resetPasswordExpires = moment().add(1, 'hours').format(); // 1 hour
//save user here
}
user_manager.getUserForEmail(req.body.email, genReset);
},
function(token, user, done) {
// email here
req.flash('successMessage', 'Password link sent!');
done(null, 'done');
}
], function(err) {
if (err) {
return next(err);
}
res.redirect('/login/recover');
});
});
Если они открывают сотни соединений, они могут получать только несколько сотен в секунду. Хотя это, вероятно, самый эффективный способ сделать это, экономическая выгода сна в моем конкретном случае перевешивает отслеживание IP-адресов. – jn1kk