devise_oauth2_facebook 0.1.42

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,36 @@
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
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_facebook'
15
+
16
+ Include the ':devise_oauth2_facebook' in your model:
17
+
18
+ devise :database_authenticatable, :registerable, :confirmable,
19
+ :recoverable, :rememberable, :trackable, :validatable, :devise_oauth2_facebook
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
+
@@ -0,0 +1,49 @@
1
+ class Devise::FacebookConsumerController < ApplicationController
2
+ include Devise::Controllers::InternalHelpers
3
+ include DeviseOauth2Facebook::FacebookConsumerHelper
4
+
5
+ def auth
6
+ url = send("fb_#{resource_name}_callback_url".to_sym)
7
+ redirect_to facebook_client.authorization.authorize_url(:redirect_uri => url , :scope => Devise.facebook_permissions)
8
+ end
9
+
10
+ def callback
11
+ # if resource_class.respond_to?(:serialize_into_cookie)
12
+ # User.first.remember_me!
13
+ # cookies.signed["remember_#{resource_name}_token"] = {
14
+ # :value => User.first.class.serialize_into_cookie(User.first),
15
+ # :expires => User.first.remember_expires_at,
16
+ # :path => "/"
17
+ # }
18
+ # end
19
+ # sign_in_and_redirect(resource_name, User.first)
20
+ # set_flash_message :notice, :signed_in
21
+ # return
22
+ url = send("fb_#{resource_name}_callback_url".to_sym)
23
+
24
+ client = facebook_client
25
+ client.authorization.process_callback(params[:code], :redirect_uri => url)
26
+
27
+ token = client.access_token
28
+ fb_user = client.selection.me.info!
29
+
30
+ # Rails.logger.info "FB USER:"
31
+ # Rails.logger.info fb_user.inspect
32
+
33
+ resource = resource_class.find_with_facebook_user(fb_user, token)
34
+ unless resource
35
+ resource = resource_class.create_with_facebook_user(fb_user, token)
36
+ end
37
+ if resource_class.respond_to?(:serialize_into_cookie)
38
+ resource.remember_me!
39
+ cookies.signed["remember_#{resource_name}_token"] = {
40
+ :value => resource.class.serialize_into_cookie(resource),
41
+ :expires => resource.remember_expires_at,
42
+ :path => "/"
43
+ }
44
+ end
45
+ set_flash_message :notice, :signed_in
46
+ sign_in_and_redirect(resource_name, resource)
47
+ end
48
+
49
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ devise:
3
+ facebook_consumer:
4
+ signed_in: 'Signed in successfully.'
@@ -0,0 +1,7 @@
1
+ require "devise_oauth2_facebook/routes"
2
+
3
+ module DeviseOauth2Facebook
4
+ class Engine < ::Rails::Engine
5
+ config.devise_oauth2_facebook = DeviseOauth2Facebook
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module DeviseOauth2Facebook::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
+
11
+ end
@@ -0,0 +1,46 @@
1
+ module Devise
2
+ module Models
3
+
4
+ module DeviseOauth2Facebook
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.respond_to?(:email)
11
+ update_facebook_user(fb_user)
12
+ self.save_without_validation
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.full_path do
7
+ get mapping.path_names[:fb_auth], :to => "#{controllers[:facebook_consumer]}#auth", :as => :"fb_#{mapping.name}_auth"
8
+ get mapping.path_names[:fb_callback], :to => "#{controllers[:facebook_consumer]}#callback", :as => :"fb_#{mapping.name}_callback"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ require 'devise'
2
+ require 'fbgraph'
3
+
4
+ require 'devise_oauth2_facebook/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
+ end
26
+
27
+ Devise.add_module(:devise_oauth2_facebook,
28
+ :strategy => false,
29
+ :controller => :facebook_consumer,
30
+ :route => :facebook_consumer,
31
+ :model => 'devise_oauth2_facebook/model'
32
+ )
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise_oauth2_facebook
3
+ version: !ruby/object:Gem::Version
4
+ hash: 79
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 42
10
+ version: 0.1.42
11
+ platform: ruby
12
+ authors:
13
+ - Mooktakim Ahmed
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-11 00:00:00 +01: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: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: fbgraph
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description:
50
+ email: mooktakim@fluxter.co.uk
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README
57
+ files:
58
+ - README
59
+ - app/controllers/devise/facebook_consumer_controller.rb
60
+ - config/locales/en.yml
61
+ - lib/devise_oauth2_facebook.rb
62
+ - lib/devise_oauth2_facebook/engine.rb
63
+ - lib/devise_oauth2_facebook/facebook_consumer_helper.rb
64
+ - lib/devise_oauth2_facebook/model.rb
65
+ - lib/devise_oauth2_facebook/routes.rb
66
+ has_rdoc: true
67
+ homepage: http://github.com/mooktakim/devise_oauth2_facebook
68
+ licenses: []
69
+
70
+ post_install_message:
71
+ rdoc_options:
72
+ - --charset=UTF-8
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ hash: 3
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ hash: 3
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ requirements: []
94
+
95
+ rubyforge_project:
96
+ rubygems_version: 1.3.7
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: Devise OAuth2 Facebook extension
100
+ test_files: []
101
+