def save(options = {}, &block)
      self.errors.clear
      # log_state
      options = {} if options == false
      options[:validate] = true unless options.has_key?(:validate)
      save_options = ActiveRecord::VERSION::MAJOR < 3 ? options[:validate] : options
      
      # kill the block if we're starting authentication
      authenticate_via_protocol(block_given?, options) do |start_authentication|
        block = nil if start_authentication # redirecting
        # forces you to validate, only if a block is given
        result = super(save_options) # validate!
        unless block.nil?
          cleanup_authentication_session(options)
          yield(result)
        end
        result
      end
    end
def save(options = {}, &block)
      self.errors.clear
      # log_state
      options = {} if options == false
      options[:validate] = true unless options.has_key?(:validate)
      save_options = ActiveRecord::VERSION::MAJOR < 3 ? options[:validate] : options
      
      # kill the block if we're starting authentication
      authenticate_via_protocol(block_given?, options) do |start_authentication|
        block = nil if start_authentication # redirecting
        # forces you to validate, only if a block is given
        result = super(save_options) # validate!
        unless block.nil?
          cleanup_authentication_session(options)
          yield(result)
        end
        result
      end
    end
core save method coordinating how to save the user.
 we dont' want to ru validations based on the
 authentication mission we are trying to accomplish.
 instead, we just return save as false.
 the next time around, when we recieve the callback,
 we will run the validations.
 when you call 'current_user_session' in ApplicationController,
 it leads to calling 'save' on this User object via "session.record.save",
 from the 'persisting?' method.  So we don't want any of this to occur
 when that save is called, and the only way to check currently is
 to check if there is a block_given?