Class: Devise::FacebookOpenGraphAuthenticatable::Strategies::FacebookOpenGraphAuthenticatable

Inherits:
Strategies::Base
  • Object
show all
Defined in:
lib/devise_facebook_open_graph/strategy.rb

Instance Method Summary collapse

Instance Method Details

#authenticate!Object

Authenticates the user as if this requests seems valid as FacebookOpenGraphAuthenticatable

Tries to auto create the user if configured to do so.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/devise_facebook_open_graph/strategy.rb', line 23

def authenticate!
  session = DeviseFacebookOpenGraph::Facebook::Session.new(cookies)

  if session.valid?
    klass = mapping.to 
    user = klass.authenticate_facebook_user session.uid
    
    if user.blank? && klass.facebook_auto_create_account?
      user = klass.new
      user.facebook_session = session
      user.set_facebook_credentials_from_session!
      user.run_callbacks :create_by_facebook do
        begin
          user.save(:validate => klass.run_validations_when_creating_facebook_user)
        rescue ActiveRecord::RecordNotUnique
          fail!(:not_unique_user_on_creation) and return
        end
      end

      if klass.run_validations_when_creating_facebook_user && !user.persisted?
        fail!(:invalid_facebook_user_on_creation) and return
      end
    end

    if user.present? && user.persisted?
      user.facebook_session = session
      user.run_callbacks :connecting_to_facebook do
        success!(user) and return
      end
    else
      fail!(:facebook_user_not_found_locally) and return
    end
  else
    fail!(:invalid_facebook_session) and return
  end
end

#valid?Boolean

This strategy is valid if Facebook has set it’s session data object in current application’s domain cookies.

Returns:

  • (Boolean)


13
14
15
# File 'lib/devise_facebook_open_graph/strategy.rb', line 13

def valid?
  mapping.to.respond_to?(:authenticate_facebook_user) && cookies.has_key?(::DeviseFacebookOpenGraph::Facebook::Config.facebook_session_name)
end