devise_oauth2_facebook_mongoid 0.1.0

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 and Mongoid is supported.
2
+
3
+ Uses fbgraph (http://github.com/nsanta/fbgraph) v= 1.5.4
4
+
5
+
6
+ How to use
7
+ ----------
8
+
9
+ Include the gem in Gemfile after devise:
10
+ gem 'devise'
11
+ gem 'devise_oauth2_facebook'
12
+ gem 'fbgraph', "~> 1.5.4"
13
+
14
+ Include the ':devise_oauth2_facebook' in your model:
15
+
16
+ devise :database_authenticatable, :registerable, :confirmable,
17
+ :recoverable, :rememberable, :trackable, :validatable, :devise_oauth2_facebook
18
+
19
+
20
+ Add the following config options:
21
+
22
+ $ config/initializers/devise.rb
23
+
24
+ config.facebook_api_key = "KEY"
25
+ config.facebook_api_secret = "SECRET"
26
+ config.facebook_permissions = 'offline_access,email,publish_stream'
27
+
28
+ Good minimum to have is "offline_access,email"
29
+
30
+ Create a migration file to add the columns:
31
+
32
+ add_column :users, :facebook_uid, :string
33
+ add_column :users, :facebook_token, :string
34
+
35
+ Finally, update your view to include "Login with facebook" link:
36
+ <%= link_to "Login with facebook", user_fb_auth_path %>
@@ -0,0 +1,32 @@
1
+ class Devise::FacebookConsumerController < ApplicationController
2
+ include Devise::Controllers::InternalHelpers
3
+ include DeviseOauth2Facebook::FacebookConsumerHelper
4
+
5
+ def auth
6
+ url = send("#{resource_name}_fb_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
+
12
+ url = send("#{resource_name}_fb_callback_url".to_sym)
13
+
14
+ client = facebook_client
15
+
16
+ puts params[:code]
17
+ client.authorization.process_callback(params[:code], :redirect_uri => url)
18
+
19
+ token = client.access_token
20
+ fb_user = client.selection.me.info!
21
+
22
+ resource = resource_class.find_with_facebook_user(fb_user, token)
23
+ unless resource
24
+ resource = resource_class.create_with_facebook_user(fb_user, token)
25
+ end
26
+ puts resource.inspect
27
+ set_flash_message :notice, :signed_in
28
+ sign_in_and_redirect(:user, resource)
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ devise:
3
+ facebook_consumer:
4
+ signed_in: 'Signed in successfully.'
@@ -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
+ )
@@ -0,0 +1,10 @@
1
+ require "devise_oauth2_facebook/routes"
2
+
3
+ module DeviseOauth2Facebook
4
+ class Engine < ::Rails::Engine
5
+ config.devise_oauth2_facebook = DeviseOauth2Facebook
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,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, :token => token)
6
+ else
7
+ FBGraph::Client.new(:client_id => Devise.facebook_api_key, :secret_id => Devise.facebook_api_secret)
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,48 @@
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.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 = User.last(conditions: {email: fb_user.email.downcase})
30
+ if !user.nil?
31
+ user
32
+ else # Create a user with a stub password.
33
+ User.create!(:email => fb_user.email.downcase, :password => token)
34
+ end
35
+ end
36
+
37
+
38
+ def create_with_facebook_user(fb_user, token)
39
+ user = new(facebook_uid_field.to_sym => fb_user["id"], :password => "fakepass", :password_confirmation => "fakepass")
40
+ user.skip_confirmation! if user.respond_to?(:skip_confirmation!)
41
+ user.do_update_facebook_user(fb_user, token)
42
+ user
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ 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,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise_oauth2_facebook_mongoid
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Mooktakim Ahmed
14
+ - Hugo Rincon
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-06-09 00:00:00 Z
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: hugo@bakedweb.net
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_facebook.rb
64
+ - lib/devise_oauth2_facebook/engine.rb
65
+ - lib/devise_oauth2_facebook/facebook_consumer_helper.rb
66
+ - lib/devise_oauth2_facebook/model.rb
67
+ - lib/devise_oauth2_facebook/routes.rb
68
+ homepage: https://github.com/hugoerg56/devise_oauth2_facebook_mongoid
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options: []
73
+
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project:
97
+ rubygems_version: 1.7.2
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Devise OAuth2 Facebook extension for rails 3 and mongoid
101
+ test_files: []
102
+