Add Captcha to SCA Registration page

Client-side:

LoginRegisterRegisterView.prototype.submitForm = function (e, model, props) {
                  e.preventDefault();
                  var self = this;
                  var data = jQuery(e.target).closest(‘form’).serializeObject();
                  grecaptcha.ready(function () {
                    grecaptcha.execute(’ABCDEFGHIJ, {
                      action: ‘submit’
                    }).then(function (token) {
                      self.$el.find(“#token”).val(token);
                      return self.cancelableTrigger(‘before:LoginRegister.register’, data)
                        .then(function () {
                          self.saveForm(e, model, props);
                        });
                    });
                  });
                } 

Server Side:

define(
  ’Register.Captcha,
  [
    ‘Application’
  ],
  function (
    Application
  ) {
    ‘use strict’;
    Application.on(‘before:Account.Register.ServiceController.post’, function () {
      var res;
      try {
        var e = arguments[0];
        res = nlapiRequestURL(“https://www.google.com/recaptcha/api/siteverify”, {
          secret: “ABCDEFG,
          response: e.data.token
        }, null);
      } catch (err) {
        nlapiLogExecution(“debug”, “reCAPTCHA error”, err);
      }
      if (res) {
        var gRes = JSON.parse(res.getBody());
        if (!gRes.success) {
          nlapiLogExecution(“debug”, “reCAPTCHA blocked”, “Request blocked: ” + res.getBody() + ” ” + JSON.stringify(e.data));
          throw new Error(“reCAPTCHA blocked this request. (” + gRes.score + “)”);
        }else{
          nlapiLogExecution(“debug”, “reCAPTCHA passed”, “Request passed: ” + res.getBody());
        }
      }
    });
  });

Link to the script client side:

if (!document.getElementById(“recaptcha”)) {
                      var script = document.createElement(‘script’);
                      script.id = ‘recaptcha’;
                      script.type = ‘text/javascript’;
                      script.src = ’https://www.google.com/recaptcha/api.js?render=ABCDEFGHI;
                      document.getElementsByTagName(‘head’)[0].appendChild(script);
                    }

Add an input to the template:

<input id=“token” name=“token” type=“hidden” />

Leave a comment

Your email address will not be published. Required fields are marked *