devise_oauth2_facebook_mongoid 0.1.0

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 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
+