devise_oauth2_facebook 0.1.42

Sign up to get free protection for your applications and to get access to all the features.
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
+