devise_oauth2_fb_canvas 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README ADDED
@@ -0,0 +1,52 @@
1
+ Only Rails 3 is supported.
2
+
3
+ Uses fbgraph (http://github.com/nsanta/fbgraph)
4
+ Could use the Oauth2 gem directly, but it is more than likely that you
5
+ would want to use other features of facebook (ie post feed updates).
6
+
7
+
8
+ How to use, web applications
9
+ ----------
10
+ Setup devise (http://github.com/plataformatec/devise), use Rails 3
11
+
12
+ Include the gem in Gemfile after devise:
13
+ gem 'devise'
14
+ gem 'devise_oauth2_fb_canvas'
15
+
16
+ Include the ':devise_oauth2_fb_canvas' in your model:
17
+
18
+ devise :database_authenticatable, :registerable, :confirmable,
19
+ :recoverable, :rememberable, :trackable, :validatable, :devise_oauth2_fb_canvas
20
+
21
+
22
+ Add the following config options:
23
+
24
+ $ config/initializers/devise.rb
25
+
26
+ config.facebook_api_key = "KEY"
27
+ config.facebook_api_secret = "SECRET"
28
+ config.facebook_permissions = 'offline_access,email,publish_stream'
29
+
30
+ Good minimum to have is "offline_access,email"
31
+
32
+ Create a migration file to add the columns:
33
+
34
+ add_column :users, :facebook_uid, :string
35
+ add_column :users, :facebook_token, :string
36
+
37
+ Finally, update your view to include "Login with facebook" link:
38
+ <%= link_to "Login with facebook", user_fb_auth_path %>
39
+
40
+ How to use, facebook canvas applications
41
+
42
+ ------
43
+
44
+ As above, except with this configuration:
45
+
46
+ $ config/initializers/devise.rb
47
+
48
+ config.facebook_api_key = "KEY"
49
+ config.facebook_api_secret = "SECRET"
50
+ config.facebook_permissions = 'offline_access,email,publish_stream'
51
+ config.facebook_canvas_app = true
52
+ config.facebook_canvas_url = 'your_facebook_canvas_app_url'
@@ -0,0 +1,46 @@
1
+ class Devise::FacebookConsumerController < ApplicationController
2
+ include Devise::Controllers::InternalHelpers
3
+ include DeviseOauth2FbCanvas::FacebookConsumerHelper
4
+
5
+ def auth
6
+ url = send("#{resource_name}_fb_callback_url".to_sym)
7
+ uri = facebook_client.authorization.authorize_url(:redirect_uri => url , :scope => Devise.facebook_permissions)
8
+ if Devise.facebook_canvas_app
9
+ render :layout => false, :inline => "<script type='text/javascript' charset='utf-8'>top.location.href='#{uri}';</script>"
10
+ else
11
+ redirect_to uri
12
+ end
13
+ end
14
+
15
+ def callback
16
+ url = send("#{resource_name}_fb_callback_url".to_sym)
17
+
18
+ client = facebook_client
19
+ client.authorization.process_callback(params[:code], :redirect_uri => url)
20
+
21
+ token = client.access_token
22
+ fb_user = client.selection.me.info!
23
+
24
+ resource = resource_class.find_with_facebook_user(fb_user, token)
25
+ unless resource
26
+ resource = resource_class.create_with_facebook_user(fb_user, token)
27
+ end
28
+ if resource_class.respond_to?(:serialize_into_cookie)
29
+ resource.remember_me!
30
+ cookies.signed["remember_#{resource_name}_token"] = {
31
+ :value => resource.class.serialize_into_cookie(resource),
32
+ :expires => resource.remember_expires_at,
33
+ :path => "/"
34
+ }
35
+ end
36
+ set_flash_message :notice, :signed_in
37
+
38
+ if Devise.facebook_canvas_app
39
+ sign_in(resource_name, resource)
40
+ redirect_to Devise.facebook_canvas_url
41
+ else
42
+ sign_in_and_redirect(resource_name, resource)
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ devise:
3
+ facebook_consumer:
4
+ signed_in: 'Signed in successfully.'
@@ -0,0 +1,40 @@
1
+ require 'devise'
2
+ require 'fbgraph'
3
+
4
+ require 'devise_oauth2_fb_canvas/engine'
5
+
6
+ module Devise
7
+ mattr_accessor :facebook_uid_field
8
+ @@facebook_uid_field = :facebook_uid
9
+
10
+ mattr_accessor :facebook_token_field
11
+ @@facebook_token_field = :facebook_token
12
+
13
+ mattr_accessor :facebook_api_key
14
+ @@facebook_api_key = nil
15
+
16
+ mattr_accessor :facebook_api_secret
17
+ @@facebook_api_secret = nil
18
+
19
+ mattr_accessor :facebook_permissions
20
+ @@facebook_permissions = 'offline_access,email'
21
+
22
+ mattr_accessor :facebook_callback_url
23
+ @@facebook_callback_url = nil
24
+
25
+ mattr_accessor :facebook_canvas_app
26
+ @@facebook_canvas_app = false
27
+
28
+ mattr_accessor :facebook_canvas_url
29
+ @@facebook_canvas_url = nil
30
+
31
+
32
+
33
+ end
34
+
35
+ Devise.add_module(:devise_oauth2_fb_canvas,
36
+ :strategy => false,
37
+ :controller => :facebook_consumer,
38
+ :route => :facebook_consumer,
39
+ :model => 'devise_oauth2_fb_canvas/model'
40
+ )
@@ -0,0 +1,10 @@
1
+ require "devise_oauth2_fb_canvas/routes"
2
+
3
+ module DeviseOauth2FbCanvas
4
+ class Engine < ::Rails::Engine
5
+ config.devise_oauth2_fb_canvas = DeviseOauth2FbCanvas
6
+
7
+ config.autoload_paths << File.expand_path(File.join(File.dirname(__FILE__), "..")) if config.respond_to? :autoload_paths
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module DeviseOauth2FbCanvas::FacebookConsumerHelper
2
+
3
+ def facebook_client(token = nil)
4
+ if token.present?
5
+ FBGraph::Client.new(:client_id => Devise.facebook_api_key, :secret_id => Devise.facebook_api_secret)
6
+ else
7
+ FBGraph::Client.new(:client_id => Devise.facebook_api_key, :secret_id => Devise.facebook_api_secret, :token => token)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,46 @@
1
+ module Devise
2
+ module Models
3
+
4
+ module DeviseOauth2FbCanvas
5
+ extend ActiveSupport::Concern
6
+
7
+ def do_update_facebook_user(fb_user, token)
8
+ self.send("#{self.class.facebook_uid_field}=".to_sym, fb_user.id)
9
+ self.send("#{self.class.facebook_token_field}=".to_sym, token)
10
+ self.email = fb_user.email.to_s.downcase if fb_user.email.present?
11
+ update_facebook_user(fb_user)
12
+ self.save(:validate => false)
13
+ end
14
+
15
+ def update_facebook_user(fb_user)
16
+ # override me
17
+ end
18
+
19
+ def active?
20
+ true
21
+ end
22
+
23
+ protected
24
+
25
+ module ClassMethods
26
+ Devise::Models.config(self, :facebook_uid_field, :facebook_token_field)
27
+
28
+ def find_with_facebook_user(fb_user, token)
29
+ user = where(facebook_uid_field.to_sym => fb_user.id).first || where(:email => fb_user.email.downcase).first
30
+ if user
31
+ user.do_update_facebook_user(fb_user, token)
32
+ end
33
+ user
34
+ end
35
+
36
+ def create_with_facebook_user(fb_user, token)
37
+ user = new(facebook_uid_field.to_sym => fb_user.id, :password => "fakepass", :password_confirmation => "fakepass")
38
+ user.skip_confirmation! if user.respond_to?(:skip_confirmation!)
39
+ user.do_update_facebook_user(fb_user, token)
40
+ user
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,11 @@
1
+ ActionDispatch::Routing::Mapper.class_eval do
2
+
3
+ protected
4
+
5
+ def devise_facebook_consumer(mapping, controllers)
6
+ scope mapping.fullpath do
7
+ get mapping.path_names[:fb_auth], :to => "#{controllers[:facebook_consumer]}#auth", :as => :fb_auth
8
+ get mapping.path_names[:fb_callback], :to => "#{controllers[:facebook_consumer]}#callback", :as => :fb_callback
9
+ end
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise_oauth2_fb_canvas
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Nina Jansen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-02 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: devise
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 17
30
+ segments:
31
+ - 1
32
+ - 1
33
+ - 1
34
+ version: 1.1.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: fbgraph
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ description:
52
+ email: info@ninajansen.dk
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README
59
+ files:
60
+ - README
61
+ - app/controllers/devise/facebook_consumer_controller.rb
62
+ - config/locales/en.yml
63
+ - lib/devise_oauth2_fb_canvas.rb
64
+ - lib/devise_oauth2_fb_canvas/engine.rb
65
+ - lib/devise_oauth2_fb_canvas/facebook_consumer_helper.rb
66
+ - lib/devise_oauth2_fb_canvas/model.rb
67
+ - lib/devise_oauth2_fb_canvas/routes.rb
68
+ has_rdoc: true
69
+ homepage: http://github.com/ninajansen/devise_oauth2_fb_canvas
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --charset=UTF-8
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ requirements: []
96
+
97
+ rubyforge_project:
98
+ rubygems_version: 1.3.7
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Devise OAuth2 Facebook extension
102
+ test_files: []
103
+