Я хочу использовать ReCaptcha в моей форме входа в систему. Я был в состоянии добавить его, но всякий раз, когда вам не удается или не удается выбрать капчу, приложение вылетает. Я получаю ошибку:
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
Я почти уверен, что это потому, что есть несколько запросов / ответов, но я недостаточно знаком с NodeJS или Запросами, чтобы найти другой способ сделать это.
Это мой код запроса на вход в систему.
app.post('/login', function(req, res) {
req.session.email=req.body.loginemail;
req.session.password=req.body.loginpass;
if(req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
res.redirect('login');
console.log("Select Captcha");
errorCode = "Select Captcha";
app.locals.errorCode = "Select Captcha"
}
var secretKey = "somekey";
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
request(verificationUrl,function(error,response,body) {
body = JSON.parse(body);
if(body.success !== undefined && !body.success) {
console.log("Failed Captcha");
}
});
var logoptions = {
url: 'https://someurl/login',
headers:
{ 'Postman-Token': 'sometoken',
'cache-control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded'
},
form: { email: req.body.loginemail, password: req.body.loginpass } };
request.post(logoptions, function (error, response, body) {
if (response.statusCode == 200){
console.log(response);
*other code related to login*
}
});
});
Как обычно это делать, я уверен, что мой путь не нормальный. Разве вы не проверите, только если пользователь выбрал капчу при отправке формы, как я здесь?