Реализация Recaptcha в POST-запрос Nodejs для входа - PullRequest
0 голосов
/ 10 января 2019

Я хочу использовать 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*
        }
    });
});

Как обычно это делать, я уверен, что мой путь не нормальный. Разве вы не проверите, только если пользователь выбрал капчу при отправке формы, как я здесь?

...