Sha256: 5fc1a8f3c8c2b380645b27aee95837699f5c687c2180bf4015c849f98b60bad0

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

module AuthlogicFacebookShim
  module Session
    
    module Facebook
      
      def self.included(klass)
      
        klass.class_eval do
          attr_accessor :skip_facebook_authentication
          validate :validate_by_facebook, :if => :authenticating_with_facebook?
        end
      
      end
      
      def logged_in_with_facebook?
        @logged_in_with_facebook
      end

      protected
      # Override this if you want only some requests to use facebook
      def authenticating_with_facebook?
        !skip_facebook_authentication && !authenticating_with_unauthorized_record? && facebook_session?
      end

      private
    
      def validate_by_facebook
        facebook_uid = facebook_session.uid
        self.attempted_record = klass.send(facebook_finder, facebook_uid)

        if self.attempted_record || !facebook_auto_register?
          return @logged_in_with_facebook = !!self.attempted_record
        else
          self.attempted_record = klass.new
          self.attempted_record.send(:"#{facebook_uid_field}=", facebook_uid)
          if self.attempted_record.respond_to?(:before_connect)
            self.attempted_record.send(:before_connect, facebook_session)
          end

          @logged_in_with_facebook = true
          return self.attempted_record.save(false)
        end
      end
    
      def facebook_app_id
        self.class.facebook_app_id
      end
    
      def facebook_api_key
        self.class.facebook_api_key
      end
    
      def facebook_secret_key
        self.class.facebook_secret_key
      end

      def facebook_auto_register?
        self.class.facebook_auto_register
      end

      def facebook_uid_field
        self.class.facebook_uid_field
      end

      def facebook_finder
        self.class.facebook_finder || "find_by_#{facebook_uid_field}"
      end
      
    end
      
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
authlogic_facebook_shim-0.3.3 lib/authlogic_facebook_shim/session/facebook.rb
authlogic_facebook_shim-0.3.2 lib/authlogic_facebook_shim/session/facebook.rb