Validate IP address and create a registration attempt
Creating a new promise when you already have a promise is considered a Promise anti-pattern.  Instead, you can just use the promise that is already available to you.  This then saves you all the reject handlers because if anywhere in the promise chain, there is a rejection that will propagate back.  So, I think you can just do this:

Authenticator.prototype.register = function(opts) {
  var self = this;
  return  self.__validateIpAddress(opts.ip).then(function() {
      self.__createRegisterAttempt(opts).then(function(attempt) {
         // ...
      });
  });
};