code: function() {
          this._completionDeferred = Promise.defer();
  
          // wrap in a promise so that if _startNextAuthStage
          // throws, it rejects the promise in a consistent way
          return Promise.resolve().then(() => {
              // if we have no flows, try a request (we'll have
              // just a session ID in _data if resuming)
              if (!this._data.flows) {
                  this._doRequest(this._data);
              } else {
                  this._startNextAuthStage();
              }
              return this._completionDeferred.promise;
          });
      }
docs: begin the authentication process.
  
  @return {module:client.Promise} which resolves to the response on success,
  or rejects with the error on failure. Rejects with NoAuthFlowFoundError if
  no suitable authentication flow can be found