Class: Devise::Strategies::KoalaConnectable
- Inherits:
-
Base
- Object
- Base
- Devise::Strategies::KoalaConnectable
- 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
-
#authenticate! ⇒ Object
Authenticate user with Koala.
- #valid? ⇒ Boolean
Instance Method Details
#authenticate! ⇒ Object
Authenticate user with Koala.
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? user_info = oauth.parse_signed_request params[:signed_request] unless user_info.present? #if no valid signed facebook request found pass return end user_id = user_info["user_id"] access_token = user_info["oauth_token"] else user_info = oauth.(request.) unless user_info.present? #if no valid facebook Session found pass return end user_id = user_info["uid"] access_token = user_info["access_token"] end Rails.logger.debug "user_info: #{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"] = user_info 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
13 14 15 |
# File 'lib/devise_koala_connectable/strategy.rb', line 13 def valid? ((valid_controller? && && koala_request?) || signed_request?) && mapping.to.respond_to?('authenticate_with_koala') end |