Class: Devise::Strategies::KoalaConnectable

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

Overview

Default strategy for signing in a user using Koala. Redirects to sign_in page if it’s not authenticated

Instance Method Summary collapse

Instance Method Details

#authenticate!Object

Authenticate user with Koala.

Raises:

  • (StandardError)


19
20
21
22
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/devise_koala_connectable/strategy.rb', line 19

def authenticate!
  klass = mapping.to

  raise StandardError, "No api_key or secret_key defined, please see the documentation of Koala gem to setup it." unless klass.koala_app_id.present? and klass.koala_secret_key.present?
  begin
    oauth = Koala::Facebook::OAuth.new(klass.koala_app_id, klass.koala_secret_key, klass.koala_callback_url)

    if signed_request?
       = oauth.parse_signed_request params[:signed_request]
      unless .present? #if no valid signed facebook request  found
        pass
        return
      end
      user_id = ["user_id"]
      access_token = ["oauth_token"]
    else
       = oauth.(request.cookies)
      unless .present? #if no valid facebook Session found
        pass
        return
      end
      user_id = ["uid"]
      access_token = ["access_token"]
    end

    Rails.logger.debug "user_info: #{.to_yaml}"

    graph = Koala::Facebook::GraphAPI.new(access_token)
    koala_user = graph.get_object(user_id)

    Rails.logger.debug koala_user.to_yaml

    unless koala_user
      fail!(:koala_invalid)
      return
    end

    if user = klass.authenticate_with_koala(koala_user)
      user.on_before_koala_success(koala_user)
      success!(user)
      return
    end

    unless klass.koala_auto_create_account? or signed_request?
      fail!(:koala_invalid)
      return
    end

    user = klass.new
    user.store_koala_credentials!(koala_user)
    koala_user["registration"] =  if signed_request?
    user.on_before_koala_auto_create(koala_user)

    user.save(:validate => false)
    user.on_before_koala_success(koala_user)
    success!(user)

  rescue Exception => e
    Rails.logger.error e.to_yaml
    fail!(:koala_invalid)
  end
end

#valid?Boolean

Returns:

  • (Boolean)


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

def valid?
  ((valid_controller? && cookie_present? && koala_request?) || signed_request?) && mapping.to.respond_to?('authenticate_with_koala')
end